XML File?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<!-- ========== Data Source Configuration =============================== -->
<data-sources>
<!-- MySQL Data Source -->
<data-source type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="password" value=""/>
<set-property property="name" value="root"/>
</data-source>
<data-sources>
<struts-config>要求:
修改<set-property property="password" value=""/>
<set-property property="name" value="root"/>
中value的属性。
给出点源码?
问题:
1. 多了这节点解析不了<!DOCTYPE .../>
2. value 属性设置不了。
我的一些源码(可运行在没有<!DocType>的条件下:
CoInitialize(NULL);
try {
CComPtr<IXMLDOMDocument>spXMLDOM;
/*CComPtr<*/IXMLDOMNode* XMLDOMNode_Cur;
/* CComPtr<*/IXMLDOMNode* XMLDOMNode_Modify;
/*CComPtr<*/IXMLDOMNode* XMLDOMNode_Item;
/* CComPtr<*/IXMLDOMNode* XMLDOMNode_ItemValue;
/* CComPtr<*/IXMLDOMNamedNodeMap* attributeMap; HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
if ( FAILED(hr) ) { throw "Can't create XML Parser Object!"; return FALSE; }
if ( spXMLDOM.p == NULL ) { throw "Can't create XML Parser Object!"; return FALSE; }
// 如果对象创建成功的话,就开始装载XML文档
VARIANT_BOOL bSuccess = false;
hr = spXMLDOM->load( CComVariant( str_XMLPath ),&bSuccess);
if ( FAILED(hr) ) { throw "Can't load XML file"; return FALSE; }
if ( !bSuccess ) { throw "Can't load XML file"; return FALSE; } CComBSTR bstrSS( L"struts-config/data-sources/data-source");
CComPtr<IXMLDOMNode> spXMLNode;
hr = spXMLDOM->selectSingleNode( bstrSS, &spXMLNode );
if ( FAILED(hr) ) { throw "Select node fail!"; return FALSE; }
spXMLNode->get_firstChild( &XMLDOMNode_Cur );
CComBSTR bstrItemName;
CComBSTR bstrSecItemName;
CString str_Password = "password";
CString str_UserName = "username";
CString str_URL = "url";
do{
XMLDOMNode_Modify = XMLDOMNode_Cur;
XMLDOMNode_Modify->get_attributes( &attributeMap );
attributeMap->get_item( 0, &XMLDOMNode_Item );
attributeMap->get_item( 1, &XMLDOMNode_ItemValue); XMLDOMNode_Item->get_nodeName( &bstrItemName );
XMLDOMNode_ItemValue->get_nodeName( &bstrSecItemName ); CString str_ItemName( bstrItemName );
CString str_SecItemName( bstrSecItemName );
if( str_ItemName == "property" && str_SecItemName == "value" ) {
VARIANT value;
VARIANT SecNodeValue;
CString str_SecNodeValue;
XMLDOMNode_Item->get_nodeValue( &value );
// property == "password"
if( ComparBSTR( value, str_Password ) ) {
XMLDOMNode_ItemValue->get_nodeValue( &SecNodeValue );
str_SecNodeValue = VARIANTtoCString( SecNodeValue );
XMLDOMNode_ItemValue->get_attributes( &attributeMap );
AfxMessageBox( str_SecNodeValue );
}
if( ComparBSTR( value, str_UserName ) )
AfxMessageBox( "username" ); if( ComparBSTR( value, str_URL) )
AfxMessageBox( "url" );
}
} while( ! XMLDOMNode_Modify->get_nextSibling( &XMLDOMNode_Cur ) );
} // try
catch(char* lpstrErr) {
AfxMessageBox( lpstrErr );
}
catch(...) {
AfxMessageBox( "Don't Understand Error!" );
} CoUninitialize();
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<!-- ========== Data Source Configuration =============================== -->
<data-sources>
<!-- MySQL Data Source -->
<data-source type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="password" value=""/>
<set-property property="name" value="root"/>
</data-source>
<data-sources>
<struts-config>要求:
修改<set-property property="password" value=""/>
<set-property property="name" value="root"/>
中value的属性。
给出点源码?
问题:
1. 多了这节点解析不了<!DOCTYPE .../>
2. value 属性设置不了。
我的一些源码(可运行在没有<!DocType>的条件下:
CoInitialize(NULL);
try {
CComPtr<IXMLDOMDocument>spXMLDOM;
/*CComPtr<*/IXMLDOMNode* XMLDOMNode_Cur;
/* CComPtr<*/IXMLDOMNode* XMLDOMNode_Modify;
/*CComPtr<*/IXMLDOMNode* XMLDOMNode_Item;
/* CComPtr<*/IXMLDOMNode* XMLDOMNode_ItemValue;
/* CComPtr<*/IXMLDOMNamedNodeMap* attributeMap; HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
if ( FAILED(hr) ) { throw "Can't create XML Parser Object!"; return FALSE; }
if ( spXMLDOM.p == NULL ) { throw "Can't create XML Parser Object!"; return FALSE; }
// 如果对象创建成功的话,就开始装载XML文档
VARIANT_BOOL bSuccess = false;
hr = spXMLDOM->load( CComVariant( str_XMLPath ),&bSuccess);
if ( FAILED(hr) ) { throw "Can't load XML file"; return FALSE; }
if ( !bSuccess ) { throw "Can't load XML file"; return FALSE; } CComBSTR bstrSS( L"struts-config/data-sources/data-source");
CComPtr<IXMLDOMNode> spXMLNode;
hr = spXMLDOM->selectSingleNode( bstrSS, &spXMLNode );
if ( FAILED(hr) ) { throw "Select node fail!"; return FALSE; }
spXMLNode->get_firstChild( &XMLDOMNode_Cur );
CComBSTR bstrItemName;
CComBSTR bstrSecItemName;
CString str_Password = "password";
CString str_UserName = "username";
CString str_URL = "url";
do{
XMLDOMNode_Modify = XMLDOMNode_Cur;
XMLDOMNode_Modify->get_attributes( &attributeMap );
attributeMap->get_item( 0, &XMLDOMNode_Item );
attributeMap->get_item( 1, &XMLDOMNode_ItemValue); XMLDOMNode_Item->get_nodeName( &bstrItemName );
XMLDOMNode_ItemValue->get_nodeName( &bstrSecItemName ); CString str_ItemName( bstrItemName );
CString str_SecItemName( bstrSecItemName );
if( str_ItemName == "property" && str_SecItemName == "value" ) {
VARIANT value;
VARIANT SecNodeValue;
CString str_SecNodeValue;
XMLDOMNode_Item->get_nodeValue( &value );
// property == "password"
if( ComparBSTR( value, str_Password ) ) {
XMLDOMNode_ItemValue->get_nodeValue( &SecNodeValue );
str_SecNodeValue = VARIANTtoCString( SecNodeValue );
XMLDOMNode_ItemValue->get_attributes( &attributeMap );
AfxMessageBox( str_SecNodeValue );
}
if( ComparBSTR( value, str_UserName ) )
AfxMessageBox( "username" ); if( ComparBSTR( value, str_URL) )
AfxMessageBox( "url" );
}
} while( ! XMLDOMNode_Modify->get_nextSibling( &XMLDOMNode_Cur ) );
} // try
catch(char* lpstrErr) {
AfxMessageBox( lpstrErr );
}
catch(...) {
AfxMessageBox( "Don't Understand Error!" );
} CoUninitialize();
解决方案 »
- 有谁知道,以.bat方式启动一个exe后,哪个函数可以获得.bat所在路径的名称。注意是.bat所在路径,不是exe所在路径。在线等
- mfc中模拟点阵屏
- OnTimer消息处理函数中发送EDIT控件内容的问题!
- ATL/ActiveX/COM和托管C++ 的效率和前景
- 如何制作嵌入WORD的ActiveX控件?
- ADO+ACCESS+VC:同样的语句,只是表名不一样,确出现了错误,请各位高手指点
- 关于数据库检索的一个奇怪问题
- 关于地址栏
- 以后很少来了
- 64位DLL引入MFC界面库异常问题
- hr =pDoc.CreateInstance(__uuidof(MSXML2::IXMLDOMDocument2));??
- 能不能只改变程序中的窗口标题栏的高度而不影响系统(即其它程序窗口的标题栏高度不受影响)?(很急!)
msn我们交流一下,我的是[email protected]
为什么我的这句编译不过去,提示load只能有一个参数?我看了它也就一个参数呀,你这个为什么两个可以?请指教
coinitialize(null);
ccomptr<ixmldomdocument> spxmldom;
hresult hr=spxmldom.cocreateinstance(_uuidof(domdocument));
if(!succeeded(hr))
{
messagebox("无法创建domdocument对象,请检查是否安装了ms xml parser 运行库!");
return ;
}
variant_bool bsuccess=false;
//hr = spxmldom->load(ccomvariant(l"he.xml"),&bsuccess); 例子是这样的,但编译出错的
hr = spxmldom->load(ccomvariant(l"c:\\he.xml"));而这个却又打不开,请问什么问题?
IXMLDOMDocument::Load(0 have 2 parameters