系列文章目录

C#处理XML 数据的技术方法总结

XmlDocument读取和创建 XML 文档

XmlWriter类提供一种快速非缓存的只进 XML 数据生成方式

XmlReader类提供一种快速非缓存的只进 XML 数据访问方式

LINQ to XML用于访问 XML 数据

XPathNavigator 类对 XmlDocument 和 XPathDocument 中的 XML 提供多个编辑选项和导航功能

XslCompiledTransform 类为使用 XSL 转换进行 XML 数据的转换提供选项


XmlDocument读取和创建 XML 文档

  • 前言
  • 一、XML 文档对象模型 (DOM)
  • 二、XML 节点类型以及层次结构
  • 三、XMl文档操作

前言

本文主要介绍以XMLDocument方式操作XML文档


一、XML 文档对象模型 (DOM)

XML 文档对象模型 (DOM) 类是 XML 文档的内存中表示形式,即将XML文档以XMLDocument的Load方法加载的时候,XML文档内的所有内容均会加载到内存中,以一个树形结构存在,这个树形结构就是XML文档对象模型。就是说,以DOM方式操作XMl文档时,如果xml文档中有内容,会将内容以树形结构全部载入内存中,如果新建,则直接在内存创建一个树形结构,以后的所有增删改查均对内存中的树形结构操作,操作完毕后,用save方法将整个树形结构插入XML文档中。

有一个XML文档内容如下:

<?xml version="1.0"?><books><book><author>Carson</author><price format="dollar">31.95</price><pubdate>05/01/2001</pubdate></book><pubinfo><publisher>MSPress</publisher><state>WA</state></pubinfo></books>

下图显示将此 XML 数据读入 DOM 结构中时如何构造内存。

XML 文档结构

在 XML 文档结构中,此图中的每个圆圈表示一个节点(称为 XmlNode 对象)。 XmlNode 对象是 DOM 树中的基本对象。 XmlDocument 类(扩展 XmlNode)支持用于对整个文档执行操作(例如,将文档加载到内存中或将 XML 保存到文件中)的方法。 此外,XmlDocument 提供了查看和处理整个 XML 文档中的节点的方法。 XmlNode 和 XmlDocument 都具有性能和可用性增强,并通过方法和属性执行下列操作:

  • 访问和修改 DOM 特定的节点,如元素节点、实体引用节点等。

  • 除检索节点包含的信息(如元素节点中的文本)外,还检索整个节点。

二、XML 节点类型以及层次结构

1.在DOM中,一切结节点,元素,属性,文字均是节点。大多数对象都继承自Node,

2.Node 对象具有一组方法和属性以及基本的和定义完善的特性。 其中的某些特性包括:

  • 节点有单个父节点,父节点是与节点相邻的上一级节点。 唯一没有父级的节点是文档根,因为它是顶级节点,包含了文档本身和文档片段。

  • 大多数节点可以有多个子节点,子节点是与节点相邻的下一级节点。 以下是可以有子节点的节点类型列表。

  • 处于同一级别、在关系图中由 book 和 pubinfo 节点表示的节点是同级。

  • 属性是不属于父子关系和同级关系的节点。 属性被视为元素节点的属性,由名称和值对组成。 例如,如果存在由与元素 price 关联的 format="dollar" 组成的 XML 数据,则单词 format 是名称,format 属性的值是 dollar。 为检索 price 节点的 format="dollar" 属性,可以在游标位于 price 元素节点时调用 GetAttribute 方法。

当将 XML 文档作为节点树读入内存时,这些节点的节点类型在创建节点时确定。 XML 文档对象模型 (DOM) 具有多种节点类型

DOM 节点类型

对象

说明

Document

XmlDocument 类

树中所有节点的容器。 它也称作文档根,文档根并非总是与根元素相同。

DocumentFragment

XmlDocumentFragment 类

包含一个或多个不带任何树结构的节点的临时袋。

DocumentType

XmlDocumentType 类

表示 <!DOCTYPE…> 节点。

EntityReference

XmlEntityReference 类

表示非扩展的实体引用文本。

Element

XmlElement 类

表示元素节点。

Attr

XmlAttribute 类

为元素的属性。

ProcessingInstruction

XmlProcessingInstruction 类

为处理指令节点。

Comment

XmlComment 类

注释节点。

Text

XmlText 类

属于某个元素或属性的文本。

CDATASection

XmlCDataSection 类

表示 CDATA。

Entity

XmlEntity 类

表示 XML 文档(来自内部文档类型定义 (DTD) 子集或来自外部 DTD 和参数实体)中的 <!ENTITY…> 声明。

Notation

XmlNotation 类

表示 DTD 中声明的表示法。

3.XML 文档对象模型 (DOM) 层次结构


三、Xml文档操作

1、操作xml文档前添加命名空间:


  •    using System.Xml;


2、新建一个XML实例:


  • XmlDocument xml=new XmlDocument();


3.加载指定的XMl文档


方法一:Lode方法加载的是XML文件所在的路径

  • xml.Load(path);

    方法二:LoadXml方法加载的是XML字符串

  •   doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" + "<title>The Handmaid's Tale</title>" + "<price>14.95</price>" + "</book>");

4.获取根节点

  • XmlElement myElement = doc.DocumentElement;创建一个myElement元素,并将doc文档的根元素赋给它

5.获取指定节点

  • //方法一:获取单个节点:如果有筛选到多个符合条件的,默认选第一个
    XmlNode node=xmldoc.SelectSingleNode("user");//方法二:这种方法需要了解节点排列顺序才可以准确的获取想要的节点
    XmlNode node=xmldoc.SelectNodes("user").Item(0);//方法三:指定了属性,进一步筛选
    XmlNode node=xmldoc.SelectSingleNode("user/person[@name='王五']")//获取user元素下的person元素,其属性name='王五'//方法四 :获取父节点
    XmlNode node=myElement.ParentNode;//方法五:获取最后一个子节点
    XmlNode lastNode = doc.DocumentElement.LastChild;//方法六:获取第一个子节点XmlNode currNode = doc.DocumentElement.FirstChild;//方法七:获取前一个同级节点XmlNode nextNode = currNode.PreviousSibling;//方法八:获取后一个同级节点XmlNode nextNode = currNode.NextSibling;

6.获取节点集合

  • //方法一:获取user节点下的person节点集合
    XmlNodeList nodelist=xmldoc.SelectNodes("user/person");//方法二:获取user节点下的所有子节点
    XmlNodeList nodelist=xmldoc.SelectSingleNode("user").ChildNodes;//方法三:获取根节点下的标签名为person的节点集合
    XmlNodeList nodelist=xmlroot.GetElementsByTagName("person")//遍历节点
    foreach(XmlNode childNode in nodelist)
    {Response.Write(childNode .Name);
    }

7.删除节点

  • //删除其下所有节点和其本身的属性,只剩下标签
    xmlroot.RemoveAll();//删除指定节点,括号里传入的是节点名
    xmlroot.RemoveChild(person);

8.创建节点

  • //方法一:利用CreateNode创建元素节点
    // 利用CreateNode可以创建任何类型的xml节点,如元素,属性等等
    //原型:CreateNode(String, String, String)   可以创建具有指定的节点类型、Name 和 NamespaceURI //的 XmlNode。
    //下面创建一个元素节点.
    XmlNode newElem = doc.CreateNode("element", "pages", "");
    //设置元素内文本
    newElem.InnerText = "290";//方法二 :创建根节点
    XmlElement xmlroot = xmldoc.CreateElement("user");
    xmldoc.AppendChild(xmlroot);//方法三:创建根节点的子节点
    XmlElement ePerson=xmldoc.CreateElement("person");
    xmlroot.AppendChild(ePerson);

9.增加属性

  • //方法一 设置某个元素的属性
    children.SetAttribute("班级","一年级");//设置children元素的属性:班级=“一年级”//方法二:
    XmlAttribute grade= xmldoc.CreateAttribute("班级");
    grade.Value = "二年级";
    children.Attributes.Append(grade);//设置文本节点
    children.InnerText = "123";
    

10.更改属性

  • children.Attributes["班级"].Value = "一年级";

11.获取属性值

  • //方法一
    string name=children.Attributes["name"].Value.ToString();//方法二
    string name=person.GetAttribute("name").ToString();//方法三:XmlNode.SelectSingleNode()方法中,节点名加@表示查找属性,但最后要转成(XmlAttribute)
    XmlAttribute xa = (XmlAttribute)person.SelectSingleNode("@" + name);
    string name=xa.Value.ToString();

12.删除属性

  • //方法一:删除某个元素的指定属性
    children.RemoveAttribute("班级");//方法二:删除某个元素的指定位置的属性
    person.RemoveAttributeAt(0);//方法三:删除所有属性
    person.RemoveAllAttributes();

13.保存XML

  • //xe为需要保存的xmlDocument
    xe.Save(string path);

C#中XmlDocument读取和创建 XML 文档相关推荐

  1. 字符串创建XML文档

    创建XML文档,方法与形式是多样的,下面Insus.NET再例举两种,可供参考. XmlDocument(namespace:System.Xml)在实例化之后,它有一个方法LoadXml(),可以把 ...

  2. C#读取与修改XML文档

    在项目开发中,对XML文档的操作是很常用的,这里,简单的说明读取与修改XML文档 XML文档的格式 <?xml version="1.0" encoding="ut ...

  3. Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构...

    分享两篇Win 10应用开发的XML文档结构:Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构. Win 10 开发中Adapt ...

  4. 使用Qt创建XML文档及XML文档的增删改

    目录名字 使用Qt创建XML文档及XML文档的增删改 XML文档的操作 :QXml + QFile+QTextStream 创建XML的一般步骤: XML 文档的操作(添加.查找.更新.删除) 添加的 ...

  5. Unity 读取和修改XML文档

    1.Unity 读取XML文档 (1) 创建一个无继承实体类Class01,一个纯C#无继承的实体类Class02. (2) Class01根据XML文档中的内容设置具体的字段,并且设置get/set ...

  6. java jdom 更新xml_Java中使用JDOM来修改XML文档(续前)

    22.3.2 使用JDOM来处理XML文档 本节介绍使用JDOM来处理之前建立的XML文档"customer.xml",包括添加.删除以及修改XML文档中的元素.步骤如下. (1) ...

  7. 用Java语言遍历读取和操纵XML文档

    实验环境:jdk1.9 实验工具:eclipse 问题: Students.xml <?xml version="1.0" encoding="GB2312&quo ...

  8. 利用POI操作不同版本号word文档中的图片以及创建word文档

    我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...

  9. java中用jdom 如何创建xml文档/将数据写入XML中

    JDomOutput.java代码如下 -------------------------------------------------------------------------------- ...

最新文章

  1. python调用百度地图画轨迹图_[python]百度地图API,正/逆地理编码,路线规划接口的调用,实现输出出行的距离和......
  2. labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)
  3. Scrapy源码阅读分析_3_核心组件
  4. GetWindowThreadProcessId
  5. CSS3背景图片百分比及应用
  6. 【多线程】CAS乐观锁
  7. C# 23种设计模式
  8. CDlinux制作U盘启动盘,打造自己的口袋系统
  9. 1011. A+B和C (15)
  10. rvm,ruby的安装
  11. Ubuntu 14.04解决minidwep-gtk无法启动问题
  12. eregi php7.0,关于php:已弃用:函数eregi()已弃用
  13. ABOUTCG发布特效之王 Houdini基础教程
  14. 前端实现录音功能插件recorder.js
  15. 初见NVelocity模板引擎
  16. 怎么查看域名被墙_怎么查看域名是否被墙检测(教你一招域名被墙解决办法)...
  17. 离奇而迷人的量子物理学:人类也是一种波
  18. Git学习笔记之三:Git 工作区、暂存区和版本库
  19. *转载 Tarjan有向图详解
  20. 黑苹果0x0501_黑苹果原版安装从零开始---3-clover配置篇

热门文章

  1. 28岁程序员,我的出路在哪里
  2. android模拟M卡,Android模拟SD卡实现方法解析
  3. LayuiAdmin的登录、注册、忘记密码、退出模块(源码实例)
  4. 猪宝宝:不到万不得已别当程序员
  5. 虚拟形象+动作捕捉+虚拟场景,虚拟数字人解锁综艺创意新玩法
  6. xmanager在多个显示器中显示
  7. win7修复计算机无法修复工具栏,win7系统鼠标点不了下面任务栏的修复办法
  8. C# 委托 (delegate)
  9. 宠物养成项目c语言文档,宠物养成游戏.doc
  10. 宠物之家 验证码部分分享