C#操作Xml:通过XmlDocument读写Xml文档

什么是Xml?


Xml是扩展标记语言的简写,是一种开发的文本格式。关于它的更多情况可以通过w3组织了解http://www.w3.org/TR/1998/REC-xml-19980210。如果你不知道它,那你就out太多了。

.Net是如何处理Xml的?


1.通过XmlDocument读写Xml文档

2.使用XmlReader读Xml使用XmlWriter写Xml

3.使用Linq to xml存取XML

4.通过XmlScheme定义固定格式xml文档

5.Xml序列化或者反序列化类

6.通过XPath查找Xml节点

7.通过Xslt转化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到节点的属性集合。

时间: 2024-11-05 12:20:41

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存取XML4.通过XmlScheme定义固定格式xml文档5.Xml序列化或者反序列化类6.通过XPath查找X

C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)

这篇博客将要讨论的是关于: 如何从C#的source以及注释, 生成一份Word格式的关于各个类,函数以及成员变量的说明文档. 他的大背景如下...... 最近的一个项目使用C#, 分N个模块, 在项目的里程碑的时候, 日本的总公司要检查我们的成果物. 成果物包括源代码, 概要设计式样书(SD,System Design), 详细设计式样书(PD, Program Design), 自动化测试等等. 源代码必须要符合编码规范(每个函数都要有注释, 方法变量的命名规则等...) 这些检查都很正常,

Day 55(08/15)jquery 操作元素(属性,css,文档处理)

四 操作元素(属性,css,文档处理) 4.1 事件 页面载入 1 2 ready(fn)  // 当DOM载入就绪可以查询及操纵时绑定一个要执行的函数. $(document).ready(function(){}) -----------> $(function(){}) 事件绑定 //语法: 标签对象.事件(函数) eg: $("p").click(function(){}) 事件委派: $("").on(eve,[selector],[data],fn

通过XmlDocument读写Xml文档参考地址

/// <summary> /// 获取一个报表的参数 http://blog.csdn.net/hdhai9451/article/details/12170069 /// </summary> public static ReportAdapterSection GetReportAdapterSectionByID(string ReportID, ProfileRole RoleType, ReportTemplateType TemplateType) { ReportA

使用多个项目生成Xml文件来显示帮助文档

终于到这了,我们首先将Product单独作为一个项目 WebAPI2PostMan.WebModel 并引用他,查看文档如下. 你会发现,你的注释也就是属性的描述没有了.打开App_Data/XmlDocument.xml文件对比之前P没移动roduct的xml文件确实Product类的描述确实没有了,因为此处的XmlDocument.xml文件是项目的生成描述文件,不在此项目 内定义的文件是不会生成在这个文件内的,那真实的需求是我们确确实实需要将所有Request和Response单独定义在一

Go 语言读写 Excel 文档

Excelize 是 Golang 编写的一个用来操作 Office Excel 文档类库,基于微软的 Office OpenXML 标准.可以使用它来读取.写入 XLSX 文件.相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片,并且在保存后不会丢失图表样式. 项目主页 github.com/Luxurioust/excelize 安装 go get github.com/Luxurioust/excelize 创建 XLSX packa

python用python-docx读写word文档

python-docx库可用于创建和编辑Microsoft Word(.docx)文件.官方文档:https://python-docx.readthedocs.io/en/latest/index.html 备注:doc是微软的专有的文件格式,docx是Microsoft Office2007之后版本使用,其基于Office Open XML标准的压缩文件格式,比 doc文件所占用空间更小.docx格式的文件本质上是一个ZIP文件,所以其实也可以把.docx文件直接改成.zip,解压后,里面的

使用CStdioFile 读写UNICODE文档

转自 http://blog.csdn.net/shuilan0066/article/details/6996310 一:写文档 1  创建文档并写入内容 CString filePath=L"C:\\unicode.txt"; CStdioFile wfile; if (!wfile.Open(filePath,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary)) { AfxMessageBox(L"文件无法修改&q

C#操作Word (2)-- 打开&amp;关闭Word文档

OK,接着上一篇“Word对象模型”,本文正式开始在VS2010中使用C#语言操作Word2007. 不是十分了解Word对象模型的朋友,请参考上一篇文章,或者下载:C#操作Word2007.pdf. ----------------------------------华丽分割-------------------------------------------- 1.添加Reference,添加命名空间 新建一个Winform工程后,首先需要给工程添加Reference 由于我的Word是20