如何使用MSXML读XML?
XML内容为
<root1>
<root2>
<data1>11111</data1>
<data2>22222</data2>
</root2>
<root2>
<data1>33333</data1>
<data2>44444</data2>
</root2>
<root2>
<data1>55555</data1>
<data2>66666</data2>
</root2>
.
.
</root1>
请问如何获取到这些值?网上找了代码能获取到但是我修改的时候估计是指针指向的问题,总是失败。谁能帮我看看怎么改
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));//创建一个com进程
if(!SUCCEEDED(hr))
{
MessageBox(_T("failure"));
}
pDoc->load("XMLTEST.XML");
MSXML2::IXMLDOMNodeListPtr pNodeList = NULL;
pNodeList = pDoc->selectNodes("//root1/root2");
MSXML2::IXMLDOMNodePtr pSubNode;
CString strTemp;
for(int i=0;i<pNodeList->Getlength();i++)
{
pSubNode=pNodeList->nextNode()->selectSingleNode("data1");
_bstr_t strRequestType=pSubNode->Gettext();
strTemp=strRequestType.operator char *();
MessageBox(strTemp);
}
pDoc->save("XMLTEST.XML");
::CoUninitialize();
[解决办法]
最近因为在做相关的东西,所以才研究了下, 下面的代码基本符合你的要求,不过仍需要根据自己的需求修改.
void ReadXML(MSXML2::IXMLDOMElementPtr pRoot)
{
MSXML2::IXMLDOMNodeListPtr pNodeList = pRoot->GetchildNodes();
int nodeCount = pNodeList->length;
if (nodeCount > 1)
{
MSXML2::IXMLDOMElementPtr xmlNode;
for (int i = 0; i < nodeCount; i++)
{
xmlNode = pNodeList->item[i];
ReadXML(xmlNode);
}
xmlNode.Release();
}
else
{
std::cout << (char*)pRoot->nodeName << ": ";
VARIANT varVal;
pRoot->get_nodeTypedValue(&varVal);
std::cout << (char*)(_bstr_t)varVal << std::endl;
}
pNodeList.Release();
}
int _tmain(int argc, _TCHAR* argv[])
{
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if (FAILED(hr))
{
return 0;
}
if (!pDoc->load("C:\\1.xml"))
{
pDoc.Release();
::CoUninitialize();
return 0;
}
MSXML2::IXMLDOMElementPtr pRoot = pDoc->GetfirstChild();
ReadXML(pRoot);
pRoot.Release();
pDoc.Release();
::CoUninitialize();
system("pause");
return 0;
}
<root1>
<root2>
<XXX1>11</XXX1>
<XXX2>22</XXX2>
</root2>
<root3>
<XXX1>33</XXX1>
<XXX2>44</XXX2>
</root3>
<root3>
<XXX1>55</XXX1>
<XXX2>66</XXX2>
</root3>
</root1>
http://chuansu.iteye.com/blog/1445628
http://bbs.csdn.net/topics/60016534
http://blog.csdn.net/loveandangle/article/details/6639901