我们来自五湖四海,不为别的,只因有共同的爱好,为中国互联网发展出一分力!

在C#.net中如何操作XML

2014年05月09日22:24 阅读: 25162 次

标签: 在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>
	

	
		 
	



 

分享到: 更多
©2017 安全焦点 版权所有.
人才招聘联系我们