首页 > 开发 > .Net > 正文

在C#.net中如何操作XML

2020-02-03 15:52:35
字体:
来源:转载
供稿:网友
 

在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>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表