首页 > 代码库 > .Net那点事儿系列:C#操作Xml:通过XmlDocument读写Xml文档
.Net那点事儿系列:C#操作Xml:通过XmlDocument读写Xml文档
什么是Xml?
Xml是扩展标记语言的简写,是一种开发的文本格式。关于它的更多情况可以通过w3组织了解http://www.w3.org/TR/1998/REC-xml-19980210。如果你不知道它,那你就out太多了。
.Net处理Xml相关随笔
1.通过XmlDocument读写Xml文档
2.通过XmlWriter和XmlReader读写Xml文档
3.通过LINK to Xml存取XML
4.通过XmlScheme定义固定格式xml文档
5.Xml序列化或者反序列化类
6.通过XPath查找Xml节点
7.通过Xslt转化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://blog.csdn.net/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://blog.csdn.net/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到节点的属性集合。
C#处理Xml相关随笔
1.通过XmlDocument读写Xml文档
2.通过XmlWriter和XmlReader读写Xml文档
3.通过LINK to Xml存取XML
4.通过XmlScheme定义固定格式xml文档
5.Xml序列化或者反序列化类
6.通过XPath查找Xml节点
7.通过Xslt转化Xml格式
.Net那点事儿系列:C#操作Xml:通过XmlDocument读写Xml文档