VC对于XML的解析以及操作
来源:互联网 发布:多益网络ceo徐宥箴 编辑:程序博客网 时间:2024/06/06 06:54
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"?>
<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("book");//创建一个<book>节点
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性
XmlElement xesub1=xmlDoc.CreateElement("title");
xesub1.InnerText="CS从入门到精通";//设置文本节点
xe1.AppendChild(xesub1);//添加到<book>节点中
XmlElement xesub2=xmlDoc.CreateElement("author");
xesub2.InnerText="候捷";
xe1.AppendChild(xesub2);
XmlElement xesub3=xmlDoc.CreateElement("price");
xesub3.InnerText="58.3";
xe1.AppendChild(xesub3);
root.AppendChild(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");
- VC对于XML的解析以及操作
- VC对于XML的解析以及操作
- 对于EXCEL2003的XML格式文件的解析
- XML解析以及增删改查的操作 1
- XML解析以及增删改查的操作 2
- XML解析以及增删改查的操作 3
- XML解析以及增删改查的操作 4
- XML解析以及增删改查的操作 5
- XML解析以及增删改查的操作6
- VC对XML的解析
- VC解析XML的方法
- C#中对于XML的操作
- dom4j对于xml文件的操作
- dom4j对于xml文件的一些操作
- .net对于Xml的常规操作
- VC++ MSXML创建XML文件以及对XML文档解析
- vc实现xml的操作
- XML简介以及XML的解析
- 零售连锁商业智能分析(BI)实例
- mysql提示的23个注意事项
- 2010年1月4日--思维存档
- 学习腾讯的产品管理之道
- 迄今为止最深刻分析家乐福的文章—从商业模式、公司制度、公司文化三方面
- VC对于XML的解析以及操作
- 利用SMTP发送Mail详解(一)
- 另补2010年1月4日
- 大家好
- 2010年1月5日--免费的,最贵的
- 文档形式的变化带来的改观
- 我的原创技术随笔大全(2000~2009)
- 匆 匆
- 2010年1月5日20:58:08--什么东西都可以反向思维的