写xml函数。文件内部路径:all->parent->child,child属性:AA,BB,CC
void writexml()
{
MSXML2::IXMLDOMDocumentPtr pDoc = NULL;
MSXML2::IXMLDOMElementPtr pNode = NULL;
MSXML2::IXMLDOMElementPtr pNode2 = NULL;
MSXML2::IXMLDOMElementPtr xmlRoot = NULL;
MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem = NULL;
_variant_t variantvalue;
HRESULT hr;
hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
// 是否安装了MS XML Parser 运行库
if (FAILED(hr)) return ;
char* AA = "aa";
char* BB = "bb";
char* CC = "cc";
char* szXmlPath = "D:\\test.xml";
pDoc->load(szXmlPath);
xmlRoot = pDoc->selectSingleNode("all");
if(xmlRoot == NULL)
{
xmlRoot = pDoc->createElement(_bstr_t::_bstr_t("all"));
if(xmlRoot == NULL) return ;
pDoc->appendChild(xmlRoot);
}
pNode = xmlRoot->selectSingleNode("parent");
if(pNode == NULL)
{
pNode = pDoc->createElement(_bstr_t::_bstr_t("parent"));
if(pNode == NULL) return ;
xmlRoot->appendChild(pNode);
}
pNode2 = pNode->selectSingleNode("child");
if(pNode2 == NULL)
{
pNode2 = pDoc -> createElement(_bstr_t::_bstr_t("child"));
if(pNode2 == NULL) return ;
pNode->appendChild(pNode2);
}
pNode2->setAttribute( _bstr_t::_bstr_t("AA"), AA);
pNode2->setAttribute( _bstr_t::_bstr_t("BB"), BB);
pNode2->setAttribute( _bstr_t::_bstr_t("CC"), CC);
pDoc->save(szXmlPath);
}
读xml函数。函数执行后szValue将存放要读取的属性的值。
// 索引查找节点属性的值
// szFilePath 为文件路径, szXmlPath 为节点路径
// szAtrribute 为索引的属性,szValue 为索引属性的值(传出参数)
bool CXmlOperate::GetXmlValue(char* szFilePath, char* szXmlPath, char* szAttribute, char* szValue)
{
if(szValue == NULL) return false; // 传入缓冲区为空
if(szFilePath == NULL) return false; // 传入文件路径为空
if(szXmlPath == NULL) return false; // 传入属性路径为空
if(szAttribute == NULL) return false; // 传入属性为空
MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMNodePtr pNode;
MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem = NULL;
HRESULT hr;
hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
// 是否安装了MS XML Parser 运行库
if (FAILED(hr)) return false;
pDoc->load(szFilePath);
pNode = pDoc->selectSingleNode(szXmlPath);
if(pNode == NULL) return false;
_variant_t variantvalue;
pNode->get_attributes(&pAttrMap);
if(pAttrMap == NULL) return false;
pAttrItem = pAttrMap->getNamedItem(szAttribute);
if(pAttrItem == NULL) return false;
pAttrItem->get_nodeTypedValue(&variantvalue);
strcpy(szValue, (char*)(_bstr_t)variantvalue);
return true;
}