C# XML解析之DOM模型

DOM的工作方式是:首先将XML文档一次性的装入内存,然后根据文档中定义的元素和属性在内存中创建一个“树型结构”也就是一个文档对象模型,这里的含义其实是把文档对象化,文档中每个节点对应着模型中一个对象,而我们都知道对象提供编程接口,所以在Application中我们正是使用这组对象来访问XML文档进而操作XML文档。

下图阐述了Application和DOM交互的过程:

DOM在内存中创建树模型:

XML文档片段个:

<parent>

<child id="123">text here</child>

</parent>

内存中的树结构如下图:

C#处理DOM的主要步骤:

1.声明XmlDocument对象并装载XML文件或片段;

Xmldocument doc=new Xmldocument(); //不要忘记导入System.Xml

doc.load("test.xml");//装载xml文件

//doc.loadXml("<book>abc</book>");转载xml片段

2.声明XmlElement变量对象并用doc.DocumentElement来赋值(得到XML文件的根元素不是根节点)

XmlElement root=doc.DocumentElement();

3.查找结点再进行相应的操作:

1)查找单个节点:一种方法:用Get系列方法,如GetFirstChild();另一种方法是SelectSingleNode("相应的XPath字符串");

2)查找节点集有两个对象XmlNodelist和XmlNamedNodeMap,前者用得比较多,后者用于处理无序节点集处理XML片段。

//方法一

//XmlNodeList el=n.ChildNodes; 得到n的所有子节点集

//方法二

//XmlNodeList el=n.SelectNodes("book"); 得到节点名为book的节点集

//方法三

//XmlElement rootEle=doc.DocumentElement;

//XmlNodeList el=rootEle.GetElementsByTagName("book");

//方法四

//XmlNodeList el=doc.GetElementsByTagName("book");

4.创建新节点主要步骤:

1) 用XmlDocument对象并用XML填充其

2) 确定要插入的位置并定位到此位置

3) 创建节点(其实也可为:Element、Attribute、Text、Comment、CDATA或Processing &Instruction)

4) 再在XmlDocment对象中添加节点

(注意:添加节点只有三种方法而已。AppendChild()、InsertBefore()还有InsertAfter();)

(一):创建元素节点

XmlElement elem=doc.CreateElement("price");

XmlElement(对象).InnerText();

XmlNode(对象).CreateTextNode();

(二):为元素节点设置属性

SetAttribute()此方法是有则改,无则创.

(三):创建其他类型的节点

XmlDocument.CreateComment()方法进行注释节点

XmlDocument.CreateCDataSection()

XmlDocument.CreateProcessingInstruction()

5.修改和删除节点

ReplaceChild();

SetAttribute();

RemoveChild();

RemoveAttribute();

RemoveAll();

6.保存XML文档

xmlDocument.Save( XMLFileName );

两个重要类:XmlNode类和XmlDocument类

时间: 2024-10-11 16:44:10

C# XML解析之DOM模型的相关文章

Android Xml解析之DOM详细攻略

参考地址:http://wenku.baidu.com/view/aca83d12cc7931b765ce15d1.html 由于dom方式是保存于内存中,比较耗内存,不过对于一些数据量比较小但又比较常用的隐秘信息,可以用此方法 People类是自己写的一个类,主要保存各个字符串数据. 1.为了具有扩展性 自己编了一个xml文件: <?xml version="1.0" encoding="utf-8"?> <peoples> <peo

xml解析之----DOM解析

DOM模型(documentobject model) ?DOM解析器在解析XML文档时,会把文档中的全部元素.依照其出现的层次关系.解析成一个个Node对象(节点). ?在dom中.节点之间关系例如以下: ?位于一个节点之上的节点是该节点的父节点(parent) ?一个节点之下的节点是该节点的子节点(children) ?同一层次,具有同样父节点的节点是兄弟节点(sibling) ?一个节点的下一个层次的节点集合是节点后代(descendant) 父.祖父节点 lNode对象提供了一系列常量来

XML解析器——DOM

1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像SAX那

Java XML解析之DOM

DOM解析是官方提供的XML解析方式之一,使用时无需引入第三方包,代码编写简单,方便修改树结构,但是由于DOM解析时是将整个XML文件加载到内存中进行解析,因此当XML文件较大时,使用DOM解析效率会降低,而且可能造成内存溢出. 当XML文件较大时应采用SAX解析(下一篇中会介绍).通常情况下,若XML文件只是用作系统的配置文件,文件一般不会很大,使用DOM解析基本就能解决问题. 以下分别是解析和生成xml的基本步骤: 1. XML解析: 上文已经说过DOM解析时是将整个XML文件加载到内存中,

XML解析中DOM解析如何使用第三方的类库

* DOM解析使用Google提供的一个开源高效的XML解析工具GDataXMLNode,他的效果要比NSXMLParser要快10倍 使用方式: 1:先倒入系统动态链接库 libxml2.2.dylib 在项目的Targets – Summary – Linked Frameworks and Libraries或者在Targets – Build Phases – Link Binary With Libraries添加libxml2.2.dylib 2:在bulidSettings中的He

java xml解析方式(DOM、SAX、JDOM、DOM4J)

XML值可扩展标记语言,是用来传输和存储数据的. XMl的特定: XMl文档必须包含根元素.该元素是所有其他元素的父元素.XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素. 所有XML元素都必须有关闭标签. XML标签对大小写敏感,并且所有属性值date都需加引号. XML元素: XMl元素是只从包括开始标签到结束标签的部分,元素可包含其他元素.文本或两者都包含,也可拥有属性. XML解析 基础方法:DOM.SAX DOM解析:平台无关的官方解析方式 SAX解析:Java中基于事

XML解析之DOM ,SAX解析区别

环境配置:导入GDataXMLNode.h 文件 1.导入GDataXMLNode.h 文件时,需要导入动态库 libxml2.2.tbd 动态库 , 2.再在Build setting下面找到 Header Search Paths ,插入 /usr/include/libxml2 3. 最后在Build Phases中的Compile Sources 下找到GDataXMLNode.m文件,在后面加上 -fno-objc-arc  因为这个三方是MRC环境的 SAX解析和DOM解析的区别:

XML解析之DOM解析技术案例

Java代码: package com.xushouwei.xml; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.No

IOS中的XML解析之DOM和SAX

一.介绍 dom是w3c指定的一套规范标准.核心是按树形结构处理数据,dom解析器读入xml文件并在内存中建立一个结构一模一样的"树",这树各节点和xml各标记相应,通过操纵此"树"来处理xml中的文件.xml文件非常大时.建立的"树"也会大,所以会大量占用内存. sax解析器核心是事件处理机制.比如解析器发现一个标记的開始标记时.将所发现的数据会封装为一个标记開始事件,并把这个报告给事件处理器.事件处理器再调用方法(startElement)处