通过XmlDocument读写Xml文档


通过XmlDocument读写Xml文档
有如下一段Xml:
?
<? xml version="1.0" encoding="utf-8" ?>
< students >
   <!--我是一段注释文字-->
   < student name="张平">
     < courses >
       < course name="语文?">
         < teacherComment >
           <![CDATA[
         这里是语文老师的批注
         ]]>
         </ teacherComment >     
     </ course >
 
       < course name="数学">
         < teacherComment >
           <![CDATA[
         这里是数学老师的批注
         ]]>
         </ teacherComment >
       </ course >
     </ courses >
   </ student >
</ students >
1.如何使用XmlDocument读取Xml

我要用一段代码遍历所有Student,并打印Student的所有属性和子节点的值
?
/*玉开博客 http://www.cnblogs.com/yukaizhao/ */
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
 
namespace XmlExample
{
     class Program
     {
         static void Main( string [] args)
         {
             string xmlFilePath = @"X:\about.net\example\XmlExample\1.xml" ;
             XmlDocument doc = new XmlDocument();
             doc.Load(xmlFilePath);
 
             //使用xpath表达式选择文档中所有的student子节点
             XmlNodeList studentNodeList = doc.SelectNodes( "/students/student" );
             if (studentNodeList != null )
             {
                 foreach (XmlNode studentNode in studentNodeList)
                 {
                     //通过Attributes获得属性名字为name的属性
                     string name = studentNode.Attributes[ "name" ].Value;
                     Console.WriteLine( "Student:" + name);
 
                     //通过SelectSingleNode方法获得当前节点下的courses子节点
                     XmlNode coursesNode = studentNode.SelectSingleNode( "courses" );
 
                     //通过ChildNodes属性获得courseNode的所有一级子节点
                     XmlNodeList courseNodeList = coursesNode.ChildNodes;
                     if (courseNodeList != null )
                     {
                         foreach (XmlNode courseNode in courseNodeList)
                         {
                             Console.Write( "\t" );
                             Console.Write(courseNode.Attributes[ "name" ].Value);
                             Console.Write( "老师评语" );
                             //通过FirstNode属性可以获得课程节点的第一个子节点,LastNode可以获得最后一个子节点
                             XmlNode teacherCommentNode = courseNode.FirstChild;
                             //读取CData节点
                             XmlCDataSection cdata = (XmlCDataSection)teacherCommentNode.FirstChild;
                             Console.WriteLine(cdata.InnerText.Trim());
                         }
                     }
                 }
             }
 
             Console.Write( "\r\nPress any key to continue...." );
             Console.Read();
         }
     }
}
XmlDocument本身是从XmlNode继承的,读Xml节点可以通过FirstChild,LastChild,或者NextSibling,PreviousSibling读取单个节点,或者通过ChildNodes读取所有子节点。还可以使用XPath表达式使用SelectNodes(string xpath)或者SelectSingleNode(string xpath)读取单个或者多个符合条件的节点。
2.如何通过XmlDocument编辑Xml
同样是读取Xml中的xml例子,我们这次要用csharp代码生成xml,如下代码:
?
/*玉开博客 http://www.cnblogs.com/yukaizhao/ */
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
 
namespace WriteXml
{
     class Program
     {
         static void Main( string [] args)
         {
             XmlDocument xmlDoc = new XmlDocument();
             //创建Xml声明部分,即<?xml version="1.0" encoding="utf-8" ?>
             xmlDoc.CreateXmlDeclaration( "1.0" , "utf-8" , "yes" );
 
             //创建根节点
             XmlNode rootNode = xmlDoc.CreateElement( "students" );
 
             //创建student子节点
             XmlNode studentNode = xmlDoc.CreateElement( "student" );
             //创建一个属性
             XmlAttribute nameAttribute = xmlDoc.CreateAttribute( "name" );
             nameAttribute .Value = "张同学" ;
             //xml节点附件属性
             studentNode.Attributes.Append(nameAttribute);
 
            
             //创建courses子节点
             XmlNode coursesNode = xmlDoc.CreateElement( "courses" );
             XmlNode courseNode1 = xmlDoc.CreateElement( "course" );
             XmlAttribute courseNameAttr = xmlDoc.CreateAttribute( "name" );
             courseNameAttr.Value = "语文" ;
             courseNode1.Attributes.Append(courseNameAttr);
             XmlNode teacherCommentNode = xmlDoc.CreateElement( "teacherComment" );
             //创建Cdata块
             XmlCDataSection cdata = xmlDoc.CreateCDataSection( "<font color=\"red\">这是语文老师的批注</font>" );
             teacherCommentNode.AppendChild(cdata);
             courseNode1.AppendChild(teacherCommentNode);
             coursesNode.AppendChild(courseNode1);
             //附加子节点
             studentNode.AppendChild(coursesNode);
 
             rootNode.AppendChild(studentNode);
             //附加根节点
             xmlDoc.AppendChild(rootNode);
 
             //保存Xml文档
             xmlDoc.Save( @"d:\test.xml" );
 
             Console.WriteLine( "已保存Xml文档" );
 
 
         }
     }
}

使用XmlDocument生成xml的要点在于使用xmlDocument的实例的CreateElement创建XmlNode或者通过CreateAttribute方法创建属性,并通过AppendChild方法附加xml节点,通过AppendAttribute附加Attribute到节点的属性集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值