您的位置:首页 > 其它

通过XmlDocument读写Xml文档(转)

2011-07-19 12:51 357 查看
通过XmlDocument读写Xml文档

有如下一段Xml:

view sourceprint?<?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的所有属性和子节点的值

view sourceprint?/*玉开博客 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,如下代码:

view sourceprint?/*玉开博客 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到节点的属性集合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: