VC对于XML的解析以及操作

来源:互联网 发布:python 私有属性 编辑:程序博客网 时间:2024/06/06 14:00

转 VC对于XML的解析以及操作

2010-01-09 11:01617人阅读评论(0)收藏举报

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_r("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"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
</bookstore>



1、往<bookstore>节点中插入一个<book>节点:

 

XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("bookstore.xml");
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
XmlElement xe1=xmlDoc.createElement_x_x_x("book");//创建一个<book>节点
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

XmlElement xesub1=xmlDoc.createElement_x_x_x("title");
xesub1.InnerText="CS从入门到精通";//设置文本节点
xe1.A(xesub1);//添加到<book>节点中
XmlElement xesub2=xmlDoc.createElement_x_x_x("author");
xesub2.InnerText="候捷";
xe1.A(xesub2);
XmlElement xesub3=xmlDoc.createElement_x_x_x("price");
xesub3.InnerText="58.3";
xe1.A(xesub3);

root.A(xe1);//添加到<bookstore>节点中
xmlDoc.Save("bookstore.xml");


//================
结果为:

 

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book genre="李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>58.3</price>
</book>
</bookstore>


2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。

 

XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
foreach(XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”
{
xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”

XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach(XmlNode xn1 in nls)//遍历
{
XmlElement xe2=(XmlElement)xn1;//转换类型
if(xe2.Name=="author")//如果找到
{
xe2.InnerText="亚胜";//则修改
break;//找到退出来就可以了
}
}
break;
}
}

xmlDoc.Save("bookstore.xml");//保存。



//=================

最后结果为:

 

<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
<book genre="update李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>亚胜</author>
<price>58.3</price>
</book>
</bookstore>



3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。

 

XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;

foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;


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

XmlNodeList xnl=xn.ChildNodes;

foreach(XmlNode xnf in xnl)
{
XmlElement xe=(XmlElement)xnf;
Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
Console.WriteLine(xe.GetAttribute("ISBN"));

XmlNodeList xnf1=xe.ChildNodes;
foreach(XmlNode xn2 in xnf1)
{
Console.WriteLine(xn2.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;

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

0 0
原创粉丝点击