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); }