C#中XML的基本操作

我用的是一种很笨的方法,但可以帮助初学者了解访问XML节点的过程.

已知有一个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 );
         //显示子节点点文本
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值