XML的查找
#include <stdio.h>
#include <iostream>
#import <msxml4.dll>
#include <string>
using namespace std;
void Travel(MSXML2::IXMLDOMNodePtr pDOMNode)
{
if (pDOMNode->GetnodeTypeString()==(_bstr_t)"element") // 獲取節點類型
{
printf("%s: ", (char*)pDOMNode->GetnodeName()); // 獲取節點標籤名稱
printf("%s ", (char*)(_bstr_t)pDOMNode->GetnodeTypedValue()); // 獲取節點值
MSXML2::IXMLDOMNamedNodeMapPtr pDOMAttrList=pDOMNode->Getattributes(); // 獲取節點屬性列表
long nLen=pDOMAttrList->Getlength();
for (int j=0; j<nLen; j++)
{
MSXML2::IXMLDOMNodePtr pDOMAttr=pDOMAttrList->Getitem(j); // 獲取指定屬性
printf("%s=", (char*)pDOMAttr->GetnodeName()); // 獲取屬性名稱
printf("%s", (char*)(_bstr_t)pDOMAttr->GetnodeTypedValue()); // 獲取屬性值
}
printf("/n");
// IXMLDOMNodeListPtr
//pDOMNode->GetchildNodes();
for (MSXML2::IXMLDOMNodePtr pDOMChild=pDOMNode->GetfirstChild()
; pDOMChild!=NULL
; pDOMChild=pDOMChild->GetnextSibling())
Travel(pDOMChild);
}
}
int main(int argc, char *argv[])
{
CoInitialize(NULL); // 初始化COM環境
// atexit(Exit);
MSXML2::IXMLDOMDocumentPtr pDOMDoc;
pDOMDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); // 創建XMLDOMDocument對象
pDOMDoc->load("e://reg.xml"); // 加載XML文檔
MSXML2::IXMLDOMNodeListPtr pDOMNodeList=pDOMDoc->getElementsByTagName("List"); // 根據標籤獲得節點列表
long nCnt=pDOMNodeList->Getlength();
for (int i=0; i<nCnt; i++)
{
MSXML2::IXMLDOMNodePtr pDOMNode=pDOMNodeList->Getitem(i); // 獲取指定節點
//pDOMNodeList=pDOMNode->GetchildNodes();
//cout<<pDOMNodeList->Getlength();
Travel(pDOMNode);
}
}
操作
已知有一個XML文件(bookstore.xml)如下:
<?xml version="1.0" encoding="gb2312"?> |
1、往<bookstore>節點中插入一個<book>節點:
XmlDocument xmlDoc=new XmlDocument(); |
//================
結果爲:
<?xml version="1.0" encoding="gb2312"?> |
2、修改節點:將genre屬性值爲“李贊紅“的節點的genre值改爲“update李贊紅”,將該節點的子節點<author>的文本修改爲“亞勝”。
XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//獲取bookstore節點的所有子節點 |
//=================
最後結果爲:
<?xml version="1.0" encoding="gb2312"?> |
3、刪除 <book genre="fantasy" ISBN="2-3631-4">節點的genre屬性,刪除 <book genre="update李贊紅" ISBN="2-3631-4">節點。
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes; |
if(xe.GetAttribute("genre")=="fantasy")
{
xe.RemoveAttribute("genre");//刪除genre屬性
}
else if(xe.GetAttribute("genre")=="update李贊紅")
{
xe.RemoveAll();//刪除該節點的全部內容
}
}
xmlDoc.Save("bookstore.xml");
//====================
最後結果爲:
<?xml version="1.0" encoding="gb2312"?> <bookstore> <book ISBN="2-3631-4"> <title>Oberon's Legacy</title> <author>Corets, Eva</author> <price>5.95</price> </book> <book> </book> </bookstore> |
4、顯示所有數據。
XmlNode xn=xmlDoc.SelectSingleNode("bookstore"); |
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("c:/aaa.xml");
XmlNode xn=xmlDoc.SelectSingleNode("todate");
XmlNodeList xnl=xn.ChildNodes;
foreach(XmlNode xnf in xnl)
{
XmlElement xe=(XmlElement)xnf;
XmlNodeList xnf1=xe.ChildNodes;
Response.Write(xnf1[0].InnerText);//顯示子節點點文本
}
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("c:/aaa.xml");
XmlNode xn=xmlDoc.SelectSingleNode("todate");
XmlNodeList xnl=xn.ChildNodes;
foreach(XmlNode xnf in xnl)
{
XmlElement xe=(XmlElement)xnf;
XmlNodeList xnf1=xe.ChildNodes;
xnf1[0].InnerText="10";
xmlDoc.Save("c:/aaa.xml");