1 遍历结点
///遍历结点
void PublicParseXML::GetAllElement(CString strFileName)
{
CoInitialize(NULL);
CComPtr<IXMLDOMDocument> spXmldoc;
HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");
if(SUCCEEDED(hr))
{
VARIANT_BOOL isSuccessFul;
CComVariant varXmlFile("aa.xml");
spXmldoc->put_async(VARIANT_FALSE);
HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);
if(isSuccessFul==VARIANT_TRUE)
{
CString str;
CString str2;
CComBSTR bstrXml;
VARIANT value;
long length=0;
CComPtr<IXMLDOMElement> spRoot=NULL;
CComPtr<IXMLDOMNodeList> spNodeList=NULL;
CComPtr<IXMLDOMNode> spNode=NULL;
CComPtr<IXMLDOMNode> spListItem=NULL;
hr = spXmldoc->get_documentElement(&spRoot);
//获取结点名称
spRoot->get_nodeName(&bstrXml);
//获取孩子列表
spRoot->get_childNodes(&spNodeList);
//获取孩子个数
spNodeList->get_length(&length);
str.Format("孩子个数: %ld",length);
AfxMessageBox(str);
for(int i=0;i<length;++i)
{
spNodeList->get_item(i, &spNode);
//获取name属性值
spNode->selectSingleNode(L"@name",&spListItem);
spListItem->get_nodeValue(&value);
str=CString(value);
str2="";
str2.Append("name= ");
str2.Append(str);
AfxMessageBox(str2);
spNode->get_text(&bstrXml);
str=CString(bstrXml);
AfxMessageBox(str);
}
}
varXmlFile.ClearToZero();
}
spXmldoc.Release();
CoUninitialize();
}
2 增加结点
///增加结点
void PublicParseXML::AddElement(CString strFileName)
{
CoInitialize(NULL);
CComPtr<IXMLDOMDocument> spXmldoc;
HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");
if(SUCCEEDED(hr))
{
VARIANT_BOOL isSuccessFul;
CComVariant varXmlFile("aa.xml");
spXmldoc->put_async(VARIANT_FALSE);
HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);
if(isSuccessFul==VARIANT_TRUE)
{
CString str;
CString str2;
CComBSTR bstrXml;
VARIANT value;
long length=0;
CComPtr<IXMLDOMElement> spRoot=NULL;
hr = spXmldoc->get_documentElement(&spRoot);
CComPtr<IXMLDOMNode> spNewNode;
spXmldoc->createNode(CComVariant(NODE_ELEMENT), OLESTR("childnode3"), OLESTR(""), &spNewNode); //创建新节点
//spRoot->selectSingleNode(OLESTR("/root/node2"), &spNode);
spRoot->appendChild(spNewNode, &spNewNode); //将新节点加为根结点的子节点
spNewNode->put_text(OLESTR("childtext2")); //写入新节点text,没有则为空
CComQIPtr<IXMLDOMElement> spEle = spNewNode; //注意这里使用CComQIPtr
spEle->setAttribute(OLESTR("attrib1"), CComVariant(OLESTR("value1")));//给新节点添加属性
spXmldoc->save(CComVariant(OLESTR("stocks.xml")));
}
}
}
3 修改结点
///修改结点
void PublicParseXML::ModifyElement(CString strFileName)
{
CoInitialize(NULL);
CComPtr<IXMLDOMDocument> spXmldoc;
HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");
if(SUCCEEDED(hr))
{
VARIANT_BOOL isSuccessFul;
CComVariant varXmlFile("aa.xml");
spXmldoc->put_async(VARIANT_FALSE);
HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);
if(isSuccessFul==VARIANT_TRUE)
{
CString str;
CString str2;
CComBSTR bstrXml;
VARIANT value;
long length=0;
CComPtr<IXMLDOMElement> spRoot=NULL;
hr = spXmldoc->get_documentElement(&spRoot);
CComPtr<IXMLDOMNode> spNewNode;
spRoot->selectSingleNode(OLESTR("/layer/breaker1"), &spNewNode);
//写入新节点text,没有则为空;写入值会把孩子结点删掉,不写则没问题
// spNewNode->put_text(OLESTR("childtext2"));
CComQIPtr<IXMLDOMElement> spEle = spNewNode; //注意这里使用CComQIPtr
spEle->setAttribute(OLESTR("attrib1"), CComVariant(OLESTR("value1")));//给节点添加新属性
spEle->setAttribute(OLESTR("name"), CComVariant(OLESTR("value1")));//修改节点属性
spXmldoc->save(CComVariant(OLESTR("stocks.xml")));
}
}
}