XML的读法:
1.CoInitialize(NULL)
2.IXMLDOMDocument *pDoc;
CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument,reinterpret_cast&pDoc)));
3.CComVariant vFile(strFileName);
VARIANT_BOOL vBool;
pDoc->load(vFile,&vBool); //检查是否成功用vBool == VARIANT_TRUE
4. IXMLDOMNode *pNode;
pDoc->QueryInterface(IID_IXMLDOMNode, reinterpret_cast(&pNode));
5. Node导航
(1)CComPtr pResultNode;
pNode->selectSingleNode(L"//TOOLBARS/FAMILY", &pResultNode);//"//TOOLBARS/FAMILY", 为XML文件中具体的路径
(2) pNode->get_firstChild(&pChild);
while( pChild )
{
//可以读取本pChild的信息了
//移动到下一个兄弟结点
pChild->get_nextSibling(&pNext);
pChild->Release();
pChild = pNext;
}
6.Node信息
pNode->get_nodeName(&bstrNodeName);
pNode->get_nodeTypeString(&bstrNodeType);
pNode->get_nodeType(&eEnum);
CString strValue;
if ( eEnum == NODE_TEXT )
{
BSTR bstrValue;
pNode->get_text(&bstrValue);
strOutput.Format(_T("%S"),bstrValue);
SysFreeString(bstrValue);
}
else if ( eEnum == NODE_COMMENT )
{
VARIANT vValue;
pNode->get_nodeValue(&vValue);
CString strValue;
if ( vValue.vt == VT_BSTR )
strOutput.Format(_T("%S"),V_BSTR(&vValue));
else
strOutput.Format(_T("Unknown comment type"));
VariantClear(&vValue);
}
else if ( eEnum == NODE_PROCESSING_INSTRUCTION )
{
strOutput.Format(_T("%S"), bstrNodeName);
}
else if ( eEnum == NODE_ELEMENT )
{
strOutput.Format(_T("%S"), bstrNodeName);
}
else
{
//
// Other types, include the type name.
//
strOutput.Format(_T("%S - %s"), bstrNodeName,strType);
}
SysFreeString(bstrNodeName);
7.Node Attributes信息.
IXMLDOMNamedNodeMap *pAttrs;
pNode->get_attributes(&pAttrs));
//Node Attributes导航:
IXMLDOMNode *pChild;
pAttrs->nextNode(&pChild);
while(pChild)
{
pChild->get_nodeName(&bstrName);
pChild->get_nodeValue(&vValue);
pAttrs->nextNode(&pChild);
}
用MSXML读XML文件精华
最新推荐文章于 2025-12-30 15:34:00 发布
566

被折叠的 条评论
为什么被折叠?



