当前位置: 首页 > 图文教程 > XML家族 > XML > C#操作xml

XML
XML简易教程之四
XML与HTML的结合(上)
XML与HTML的结合(下)
XML入门的常见问题(一)
XML入门的常见问题(二)
XMLHTTP资料
什么是XML
什么是 XML Web Service
XML正在接管Web服务 成为SOA的基础
怎么样在网页上读取远程xml的数据
XML教程—编写结构完整的XML文档
读写xml文件的2个小函数
XML文档的基本操作
初学者如何开发出一个高质量的J2EE系统
优化 JavaScript 代码
自动更新程序的设计框架
使Firefox对XML的处理兼容IE的节点处理方法
WML学习之四 锚和任务
WML学习之五 显示表单
WML学习之六 事件

XML 中的 C#操作xml


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 46 ::
收藏到网摘: n/a

在C#.net中如何操作XML
需要添加的命名空间:
using System.Xml;

定义几个公共对象:
XmlDocument xmldoc ;
XmlNode xmlnode ;
XmlElement xmlelem ;

1,创建到服务器同名目录下的xml文件:


方法一:
xmldoc 
= new XmlDocument ( ) ;
//加入XML的声明段落
xmlnode = xmldoc.CreateNode ( XmlNodeType.XmlDeclaration , "" , "" ) ;
xmldoc.AppendChild ( xmlnode ) ;
//加入一个根元素
xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ;
xmldoc.AppendChild ( xmlelem ) ;
//加入另外一个元素
for(int i=1;i<3;i++)
{

XmlNode root
=xmldoc.SelectSingleNode("Employees");//查找<Employees> 
XmlElement xe1=xmldoc.CreateElement("Node");//创建一个<Node>节点 
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性 
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性 

XmlElement xesub1
=xmldoc.CreateElement("title"); 
xesub1.InnerText
="CS从入门到精通";//设置文本节点 
xe1.AppendChild(xesub1);//添加到<Node>节点中 
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);
//添加到<Employees>节点中 
}

//保存创建好的XML文档
xmldoc.Save ( Server.MapPath("data.xml") ) ; 

//////////////////////////////////////////////////////////////////////////////////////
结果:在同名目录下生成了名为data.xml的文件,内容如下,
<?xml version="1.0"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
</Employees>


方法二:
XmlTextWriter xmlWriter;
  
string strFilename = Server.MapPath("data1.xml") ;

  xmlWriter 
= new XmlTextWriter(strFilename,Encoding.Default);//创建一个xml文档
  xmlWriter.Formatting = Formatting.Indented;
  xmlWriter.WriteStartDocument();
  xmlWriter.WriteStartElement(
"Employees");

  xmlWriter.WriteStartElement(
"Node");
  xmlWriter.WriteAttributeString(
"genre","李赞红");
  xmlWriter.WriteAttributeString(
"ISBN","2-3631-4");

  xmlWriter.WriteStartElement(
"title");
  xmlWriter.WriteString(
"CS从入门到精通");
  xmlWriter.WriteEndElement();

  xmlWriter.WriteStartElement(
"author");
  xmlWriter.WriteString(
"候捷");
  xmlWriter.WriteEndElement();

  xmlWriter.WriteStartElement(
"price");
  xmlWriter.WriteString(
"58.3");
  xmlWriter.WriteEndElement();

  xmlWriter.WriteEndElement();

  xmlWriter.Close();
//////////////////////////////////////////////////////////////////////////////////////
结果:
<?xml version="1.0" encoding="gb2312"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
</Employees>

2,添加一个结点:

XmlDocument xmlDoc
=new XmlDocument(); 
xmlDoc.Load(Server.MapPath(
"data.xml")); 
XmlNode root
=xmlDoc.SelectSingleNode("Employees");//查找<Employees> 
XmlElement xe1=xmlDoc.CreateElement("Node");//创建一个<Node>节点 
xe1.SetAttribute("genre","张三");//设置该节点genre属性 
xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性 

XmlElement xesub1
=xmlDoc.CreateElement("title"); 
xesub1.InnerText
="C#入门帮助";//设置文本节点 
xe1.AppendChild(xesub1);//添加到<Node>节点中 
XmlElement xesub2=xmlDoc.CreateElement("author"); 
xesub2.InnerText
="高手"
xe1.AppendChild(xesub2); 
XmlElement xesub3
=xmlDoc.CreateElement("price"); 
xesub3.InnerText
="158.3"
xe1.AppendChild(xesub3); 

root.AppendChild(xe1);
//添加到<Employees>节点中 
xmlDoc.Save ( Server.MapPath("data.xml") );

//////////////////////////////////////////////////////////////////////////////////////
结果:在xml原有的内容里添加了一个结点,内容如下,
<?xml version="1.0"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node genre="张三" ISBN="1-1111-1">
  
<title>C#入门帮助</title>
  
<author>高手</author>
  
<price>158.3</price>
</Node>
</Employees>

3,修改结点的值(属性和子结点):

XmlDocument xmlDoc
=new XmlDocument(); 
xmlDoc.Load( Server.MapPath(
"data.xml") ); 

XmlNodeList nodeList
=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点 

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
="亚胜";//则修改
}
 
}
 
}
 
}
 
xmlDoc.Save( Server.MapPath(
"data.xml") );//保存。

//////////////////////////////////////////////////////////////////////////////////////
结果:将原来的所有结点的信息都修改了,xml的内容如下,
<?xml version="1.0"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node genre="update张三" ISBN="1-1111-1">
  
<title>C#入门帮助</title>
  
<author>亚胜</author>
  
<price>158.3</price>
</Node>
</Employees>

4,修改结点(添加结点的属性和添加结点的自结点):
XmlDocument xmlDoc
=new XmlDocument(); 
xmlDoc.Load( Server.MapPath(
"data.xml") ); 

XmlNodeList nodeList
=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点 

foreach(XmlNode xn in nodeList) 

XmlElement xe
=(XmlElement)xn; 
xe.SetAttribute(
"test","111111");

XmlElement xesub
=xmlDoc.CreateElement("flag"); 
xesub.InnerText
="1"
xe.AppendChild(xesub); 
}
 
xmlDoc.Save( Server.MapPath(
"data.xml") );

//////////////////////////////////////////////////////////////////////////////////////
结果:每个结点的属性都添加了一个,子结点也添加了一个,内容如下,
<?xml version="1.0"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4" test="111111">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
  
<flag>1</flag>
</Node>
<Node genre="李赞红" ISBN="2-3631-4" test="111111">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
  
<flag>1</flag>
</Node>
<Node genre="update张三" ISBN="1-1111-1" test="111111">
  
<title>C#入门帮助</title>
  
<author>亚胜</author>
  
<price>158.3</price>
  
<flag>1</flag>
</Node>
</Employees>

5,删除结点中的某一个属性:
XmlDocument xmlDoc
=new XmlDocument(); 
xmlDoc.Load( Server.MapPath(
"data.xml") ); 
XmlNodeList xnl
=xmlDoc.SelectSingleNode("Employees").ChildNodes; 
foreach(XmlNode xn in xnl) 

XmlElement xe
=(XmlElement)xn; 
xe.RemoveAttribute(
"genre");//删除genre属性 

XmlNodeList nls
=xe.ChildNodes;//继续获取xe子节点的所有子节点 
foreach(XmlNode xn1 in nls)//遍历 

XmlElement xe2
=(XmlElement)xn1;//转换类型 
if(xe2.Name=="flag")//如果找到 

xe.RemoveChild(xe2);
//则删除
}
 
}
 
}
 
xmlDoc.Save( Server.MapPath(
"data.xml") ); 

//////////////////////////////////////////////////////////////////////////////////////]
结果:删除了结点的一个属性和结点的一个子结点,内容如下,
<?xml version="1.0"?>
<Employees>
<Node ISBN="2-3631-4" test="111111">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node ISBN="2-3631-4" test="111111">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node ISBN="1-1111-1" test="111111">
  
<title>C#入门帮助</title>
  
<author>亚胜</author>
  
<price>158.3</price>
</Node>
</Employees>

6,删除结点:
XmlDocument xmlDoc
=new XmlDocument(); 
xmlDoc.Load( Server.MapPath(
"data.xml") ); 
XmlNode root
=xmlDoc.SelectSingleNode("Employees");
XmlNodeList xnl
=xmlDoc.SelectSingleNode("Employees").ChildNodes; 
for(int i=0;i<xnl.Count;i++)
{
XmlElement xe
=(XmlElement)xnl.Item(i); 
if(xe.GetAttribute("genre")=="张三"

root.RemoveChild(xe);
if(i<xnl.Count)i=i-1;
}
 
}

xmlDoc.Save( Server.MapPath(
"data.xml") ); 

//////////////////////////////////////////////////////////////////////////////////////]
结果:删除了符合条件的所有结点,原来的内容:

<?xml version="1.0"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node genre="张三" ISBN="1-1111-1">
  
<title>C#入门帮助</title>
  
<author>高手</author>
  
<price>158.3</price>
</Node>
<Node genre="张三" ISBN="1-1111-1">
  
<title>C#入门帮助</title>
  
<author>高手</author>
  
<price>158.3</price>
</Node>
</Employees>

删除后的内容:
<?xml version="1.0"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
<Node genre="李赞红" ISBN="2-3631-4">
  
<title>CS从入门到精通</title>
  
<author>候捷</author>
  
<price>58.3</price>
</Node>
</Employees>