C#中XML的基本操作

来源:互联网 发布:2017公安部网络贩枪案 编辑:程序博客网 时间:2024/06/05 18:56
我用的是一种很笨的方法,但可以帮助初学者了解访问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 );
        //显示子节点点文本
    }
}