XML文档对象模型解析

XML文档对象模型解析
XML文档对象模型解析

XML文档对象模型

1)DOMDocument对象:该对象描述全部的文档映射表,文档映射表包含了XML 文档里的所有信息。

常用方法

常用属性

2)IXMLDOMNode对象:该对象描述XML文档里的节点。这个节点可以是元素、属性、处理指令、文本或者其他存储在XML文档里的信息。

常用方法

常用属性

3)IXMLDOMNodeList对象:该对象描述IXMLDOMNode对象的集合,并可使用该对象遍历这个集合。IXMLDOMNodeList对象里的节点集合可以用数值该问。

常用方法

常用属性

4)IXMLDOMParseError对象:该对象用来验证XML文档对于Schema或DTD的正确性,并且取得在验证过程中产生的错误信息。

常用方法

常用属性

* DOMDocument对象常用方法:

a)createElement(elementName) ---- 该方法以元素名为参数创建一个用此参数命名的元素节点。(不能创建名称空间受限制的元素。如果要创建名称空间受限制的元素,必须使用createNode()方法)

例: doc.createElement("PRODUCT"),有些用到:doc-> creatElement('item')

b)createAttribute(attributeName) ---- 该方法以属性名为参数创建一个用此参数命名的属性节点。

例: doc.createAttribute("PRODID")

xml中表现形式:下载通道名称

c)createComment(text) ---- 该方法以字符串为参数创建一个包含此字符串的注释节点。

例: doc.createComment("This is an XML document")

下载通道名称

d)createTextNode(text) ---- 该方法以字符串为参数创建一个包含指定字符串的正文节点。

例: doc.createTextNode("Sony Workman")

e)createNode(type,name,namespace-URI) ---- 该方法创建元素节点。三个参数,"类型"参数是variant型,既可以是字符串也可以是整型。第二个参数是字符串,它代表将要创建的节点的名字。第三个参数是代表namespace-URI 的字符串。如果namespace-URI为空字符串,则新创建的节点就没有名称空间URI

例: doc.createNode("element","PRODUCT","")

doc.createNode("element","prod:

PRODUCT","https://www.360docs.net/doc/767672314.html,/fcrpg2005")

doc.createNode(1,"PRODUCT","")

f)getElementsByTagName(elementName) ---- 该方法以字符串为参数。这个字符串是要搜索的元素。返回IXMLDOMNodeList对象,包含指定元素名称的节点的集合。可以用这些节点信来浏览操纵存储在指定元素中的值。

例: doc.getEelmentsByTagName("PRICE")

g)load(XMLdocument) ---- 该方法以字符串为参数。这个字符串是XML文档的地址(HTTP地址或本地地址)

例: doc.load("https://www.360docs.net/doc/767672314.html,/fcrpg2005/product.xml")

doc.load("D:\product.xml")

h)loadXML(string) ---- 该方法把成形的XML代码或整个XML文档载入DOMDocument对象中。

例: doc.loadXML("Barbie Doll")

i)transformNode(stylesheet object) ---- 该方法以风格表对象为参数。通过把相应的风格表加到XML文档上来处理节点,然后返回转换结果。

例: doc.transformNode("product.xsl")

j)appendChild(child node) ---- 该方法以对象为参数。把这个对象作为最后的子节点加在XML文档上。createNode() 或者 createElement()方法可以创建节点或元素。但是它们不会把新建的节点加到文档树形结构上。而是需要用appendChild()方法,insertBefore()方法,或者replaceChild()方法把新建的节点加上去。

例: doc.appendChild(root) ---- PS: root是一个用createNode()或createElement()方法创建的节点

k)save(destination) ---- 该方法以对象为参数。这个对象可以是一个DOMDocument对象也可以是一个文件名。save()方法把DOMDocument对象保存在指定的目的地。

例: doc.save("https://www.360docs.net/doc/767672314.html,/fcrpg2005/product.xml")

* DOMDocument对象常用属性:

a)async ---- 该属性用来指定是否允许异步加载。属性async取布尔值。例: doc.async = false --同步

b)childNodes ---- 该属性返回属于一个父节点的子节点集合(即返回当前元素所有子元素的数组对象)。该属性的值是对象IXMLDOMNodeList的类型。

例: var firstelem = doc.childNodes.item(0)

c)documentElement ---- 该属性包含用对象DOMDocument表示的XML文档的根元素。

例: var root = doc.documentElement

d)firstChild ---- 该属性返回父元素的第一个子节点。该元素是只读的。例: var firstelem = doc.firstChild

e)lastChild ---- 该属性返回父元素的最后一个子节点。

例: var lastelem = https://www.360docs.net/doc/767672314.html,stChild

f)parseError ---- 该属性返回一个包含大部分最近产生的错误信息的对象。例: var error = doc.parseError

g)readyState ---- 该属性返回XML文档的状态。它显示这个文档是否已完全载入。4个状态:0-未初始化、1-正在加载、2-已加载、3-交互中、4-已完成

例: var stateInfo = doc.readState

if(stateInfo == 4) { // Document loading

// Coding

}

h)xml ---- 该属性返回一个节点以有其子节点的XML表示。

例: document.write(doc.xml)

i)validateOnParse ---- 该属性指定解析器是否在解析XML文档时验证其合法性。

例: doc.validateOnParse = true

** IXMLDOMNode对象常用方法:

a)appendChild(newChild) ---- 该方法把节点newChild加到该方法使用的节点的子节点的末尾。

b)insertBefore(newNode, refNode) ---- 该方法把一个新节点newNode插到一个已存在节点refNode之前。

c)removeChild(nodeName) ---- 该方法删除指定的节点。

d)replaceChild(newNode, oldNode) ---- 该方法用新节点newNode替换旧节点oldNode。

e)hasChildNodes() ---- 如果IXMLDOMNode对象有子节点,该方法返回值为真(true)。

f)cloneNode(Boolean) ---- 如果参数Boolean为真,该方法返回IXMLDOMNode 对象一个完全克隆。该克隆节点包含和原节点一样的子节点。

** IXMLDOMNode对象常用属性:

a)nodeName ---- 返回节点名称。

b)nodeType ---- 返回节点类型。

c)nodeValue ---- 返回节点包含的文本。

d)childNodes ---- 返回用IXMLDOMNode对象表示的节点的子节点集。

e)firstChild ---- 返回该节点的第一个子节点。

f)lastChild ---- 返回该节点的最后一个子节点。

g)text ---- 返回IXMLDOMNode在IXMLDOMNode对象中的文本。

h)xml ---- 返回IXMLDOMNode对象的XML代码

*** IXMLDOMNodeList对象常用方法:

a)item(number) ---- 该方法返回指定数值对应位置的节点。

b)nextNode() ---- 该方法返回节点集的下一个节点。

*** IXMLDOMNodeList对象常用属性:

length ---- 获得节点集中节点的个数。

**** IXMLDOMParseError对象常用属性:

a)errorCode ---- 该属性包含类型为长整型的错误代码。如果XML文档没有错误,该属性返回0。

b)reason ---- 该属性包含解释错误原因的字符串。

c)line ---- 该属性存储代表错误行数的长整型。

d)linePos ---- 该属性存储代表错误行位置的长整型。

e)srcText ---- 该属性包含引起错误的那一行字符串。

与使用 removeChild() 不同的是,应用程序简单地使用了replaceChild()。注意在此例中,该方法还会返回旧的节点,以便能根据需要将它移往别处,或许

是移到一个新 Document,该 Document 列出所有订单不足的商品。注意由于没有内容被添加到该元素,因此它是一个空元素。空元素没有内容,并且可以用一种特殊的简写来表示: 斜线(/)消除了对结束标签

()的需要。...

if (thisOrderItem.getAttributeNode("instock")

.getNodeValue().equals("N")) {

Element backElement = doc.createElement("backordered");

Node deadNode = thisOrderItem.getParentNode()

.replaceChild(backElement, thisOrderItem);

}

创建和设置属性

没有标志表明一个 backordered 元素是什么商品,那该怎么正确处理它呢?纠正信息缺乏的方法之一是向元素添加属性。应用程序首先创建一个 itemid 属性。接下来,它根据原先的 item 元素确定 itemid 的值,然后再自己设置该属性的值。最后,它把该元素添加到文档,就像以前一样。...

if (thisOrderItem.getAttributeNode("instock")

.getNodeValue().equals("N")) {

Element backElement = doc.createElement("backordered");

backElement.setAttributeNode(doc.createAttribute("itemid"));

String itemIdString =

thisOrderItem.getAttributeNode("itemid").getNodeValue();

backElement.setAttribute("itemid", itemIdString);

Node deadNode =

thisOrderItem.getParentNode().replaceChild(backElement, thisOrderItem);

} else {

...

如果具有该名称的节点不存在, setAttribute() 就会创建一个属性节点。

删除属性

应用程序还可以删除属性。例如,在输出中显示客户信用限额信息也许是不可取的,因此应用程序可以临时地将该属性从文档中删除。删除信息是相当简单的,只需使用 removeAttribute() 来删除数据。...

Element thisOrder = (Element)orders.item(orderNum);

Element customer =

(Element)thisOrder.getElementsByTagName("customerid")

.item(0);

customer.removeAttribute("limit");

NodeList orderItems = thisOrder.getElementsByTagName("item");

dim p() as process

dim ps as process

ps=process.getprocesses

for each ps in p

语句

next

把p看作集合,把ps看作元素。这个就是用PS遍历p中的元素了。

XML文件格式及特点

XML文件格式的特点 1. 具有良好的格式 XML 文档格式属于良好格式的文件。HTML 文件中的标记,有些是不需要结尾标记的,如
,有些网页缺少若干结尾标记,照样能正确显示。而XML 的标记一定要拥有结尾标记,例如: 张三 即,XML 标记一定是成双成对的。如果没有结尾标记,那么在结束的“>”前,需要有“/”,表示开头和结尾是在同一标记内,例如: 2. 具有验证机制 XML 的标记是程序员自己定义的,标记的定义和使用是否符合语法,需要验证。XML有两种验证方法。一种是DTD,它是一个专门的文件,用来定义和检验XML 文档中的标记。另一种是XML Schema,用XML 语法描述。它比DTD 更优越,多个Schema 可以复合使用XML 名称空间,可以详细定义元素的内容及属性值的数据类型。 3. 灵活的Web 应用 在 XML 中数据和显示格式是分开设计的,XML 元数据文件就是纯数据的文件,可以作为数据源,向HTML 提供显示的内容,显示样式可以随HTML 的变化而丰富多彩。也就是说,HTML 描述数据的外观,而XML 描述数据本身,是文本化的小型数据库表达语言。HTML 数据和显示格式混在一起,显示出一种样式。XML 采用的标记是自己定义的,这样数据文件的可读性就能大大提高,也不再局限于HTML 文件中的那些标准标记了。由于XML 是一个开放的基于文本的格式,它可以和HTML 一样使用HTTP 进行传送,不需要对现存的网络进行改变。数据一旦建立,XML 就能被发送到其他应用软件、对象或者中间层服务器中做进一步的处理,或者可以被发送到桌面用浏览器浏览。XML 和HTML、脚本、公共对象模式一起为灵活的3 层Web 应用软件的开发提供了所需的技术。 4. 丰富的显示样式 XML 数据定义打印、显示排版信息主要有3 种方法:用CSS(Cascading Style Sheet)定义打印和显示排版信息,用XSLT 转换到HTML 进行显示和打印,用XSLT 转换成XSL(eXtensible Stylesheet Language)的FO(Formatter Object) 进行显示和打印。这些方法可以显示出丰富的样式,呈现漂亮的网页。 5. XML 是电子数据交换(EDI)的格式 XML 是为互联网的数据交换而设计的,它不仅仅是SGML 定义的用于描述的文档,而且在电子商务等各个领域使数据交换成为可能,如图1.2 所示。XML 能够应用于各种领域的原因,就是它具有到目前为止其他方法所不具备的数据描述特点,控制信息不是采用应用软件的独有形式,而是采用谁都可以看得懂的标记形式来表现,所以XML 最适合作为数据交换的标准,这也是XML 受人关注的原

java_Dom4j解析XML详解

学习:Dom4j 1、DOM4J简介 DOM4J是https://www.360docs.net/doc/767672314.html, 出品的一个开源XML 解析包。DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。 DOM4J 使用起来非常简单。只要你了解基本的XML-DOM 模型,就能使用。 Dom:把整个文档作为一个对象。 DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:

接口之间的继承关系如下: interface https://www.360docs.net/doc/767672314.html,ng.Cloneable interface org.dom4j.Node interface org.dom4j.Attribute interface org.dom4j.Branch interface org.dom4j.Document interface org.dom4j.Element interface org.dom4j.CharacterData interface org.dom4j.CDATA interface https://www.360docs.net/doc/767672314.html,ment interface org.dom4j.Text interface org.dom4j.DocumentType interface org.dom4j.Entity interface org.dom4j.ProcessingInstruction 2、XML文档操作1 2.1、读取XML文档: 读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。 public static Docum ent load(String filenam e) { Document docum ent =null; try { SAXReader saxReader = new SAXReader(); docum ent =saxReader.read(new File(filename)); //读取XML文件,获得docum ent 对象 } catch (Exception ex) { ex.printStackTrace();

XML报文解析测试

XML报文解析测试 在平时工作中,难免会遇到把 XML 作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。 预备 测试环境: AMD 毒龙1.4G OC 1.5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在 Debug 模式下测试。 XML 文件格式如下: <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>四川省XX市XX乡XX村XX组</ADDR> </VALUE> </RESULT> 测试方法: 采用 JSP 端调用Bean(至于为什么采用JSP来调用,请参考: https://www.360docs.net/doc/767672314.html,/rosen/archive/2004/10/15/138324.aspx),让每一种方案分别解析10K、100K、1000K、10000K的 XML 文件,计算其消耗时间(单位:毫秒)。 JSP 文件: <%@ page contentType="text/html; charset=gb2312" %> <%@ page import="com.test.*"%> <html> <body> <% String args[]={""}; MyXMLReader.main(args); %>

android 中对xml 进行解析

DOM解析器是通过将XML文档解析成树状模型并将其放入内存来完成解析工作的,而后对文档的操作都是在这个树状模型上完成的。这个在内存中的文档树将是文档实际大小的几倍。这样做的好处是结构清除、操作方便,而带来的麻烦就是极其耗费系统资源。而SAX正好克服了DOM的缺点,分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。 选择DOM 还是选择SAX,这取决于下面几个因素: 应用程序的目的:如果打算对数据作出更改并将它输出为XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。 数据容量:对于大型文件,SAX 是更好的选择。 数据将如何使用:如果只有数据中的少量部分会被使用,那么使用SAX 来将该部分数据提取到应用程序中可能更好。另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么SAX 也许不是恰当的选择。 对速度的需要:SAX 实现通常要比DOM 实现更快。 基于上面的分析,在基于Android系统的内存和CPU资源比较有限的手持设备上,只要我们不需要修改XML数据或者随机的访问XML数据,SAX尽管可能需要更多的编码工作,但是为了更小的内存和CPU 消耗,还是值得的。 另外,Android SDK中已经包含了JAXP对应的javax.xml.parsers包,和SAX对应org.xml.sax(当然DOM对应的org.w3c.dom包也包含在内),加上Android还提供了android.sax这样的包来方便SAX Handle的开发,基于JAXP和SAX这样的标准方法来开发不仅复杂度不高,即使出现问题在讨论组中寻求解决方案也是比较容易的。 android 中的xml解析应该是和java中一条道路主要分为sax 解析和的Dom 解析。 如下的介绍的相关的包和类均为android 环境下: sax解析对应为: org\xml\sax 包:xml解析 javax.xml.parsers.SAXParserFactory javax.xml.parsers.SAXParser 两个主要用于SAXParser的上下文建立

Qt中使用DOM对XML进行的各种解析

Qt中使用DOM对XML进行的各种解析(总结) 前几天因为底层拓扑结构发生了变化,导致拓扑文件发生了变化,我负责的对于拓扑文件的解析操作自然也就要推到重来。利用上个周末的时间,把这个任务搞定了,顺便也利用这个时间好好总结下这次学到的知识。 我们知道,QT中对于XML文件的读写无非就两种方式,DOM和SAX,两种方法的具体介绍如下: /***************************************我是传说中的分割线**************************************************************/ 用于读取和操作XML 文件的标准是文档对象模型DOM。 DOM为XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后您的代码就可以使用DOM 接口来操作这个树结构。您可以遍历树以了解原始文档包含了什么,您可以删除树的几个部分,还可以重新排列树和添加新的分支,等等。遗憾的是,因为DOM 方法涉及读取整个文件并将该文件存储在一个树结构中,而这样可能是低效的、缓慢的,并且很消耗资源: DOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。 DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。 DOM 解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。 这些仅仅是由文档对象模型的设计引起的问题;撇开这些问题,DOM API 是解析XML 文档非常有用的方法。 一种替代技术就是SAX。相比于文档对象模型DOM,SAX 是读取和操作XML 数据的更快速、更轻量的方法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及DOM所必需的开销和概念跳跃。 SAX API是一个基于事件的API,适用于处理数据流,即随着数据的流动而依次处理数据。SAX API 在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会被抛弃。 /***************************************我是华丽的分割线**********************************************************************/ 我们可以看到,如果所要读取的XML文件不是很大,采用DOM读取方法还是很便捷的,由于我用的也是DOM树读取的方法,所以,本文所介绍的也主要是基于DOM的方法读取。 根据常用的操作,我简单的把对XML的操作分为以下几类: 1 首先对XML文件进行操作,打开文件。 这个其实就是对文件进行操作,可以把它直接定义为构造函数,在对对象进行初始化时完成。 TopoDataReader::TopoDataReader(const wstring &filePath):_filePath(filePath),_qDomDoc("mydocument"),_qFile(QString::fromStdWString(fileP ath))

xml文件格式

XML文件结构 一个XML文件通常包含文件头和文件体两大部分 1. 文件头 XML文件头由XML声明与DTD文件类型声明组成。其中DTD文件类型声明是可以缺少的,关于DTD声明将在后续的内容中介绍,而XML声明是必须要有的,以使文件符合XML的标准规格。 在前面的Flowers.xml文件中的第一行代码即为XML声明: 其中: “”代表一条指令的结束; “xml”代表此文件是XML文件; “ version="1.0" ”代表此文件用的是XML1.0标准; “ encoding="gb2312" ”代表此文件所用的字符集,默认值为Unicode,如果该文件中要用到中文,就必须将此值设定为gb2312。 注意:XML声明必须出现在文档的第一行。 2. 文件体 文件体中包含的是XML文件的内容,XML元素是XML文件内容的基本单元。从语法讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。

XML元素与HTML元素的格式基本相同,其格式如下: <标记名称属性名1="属性值1"属性名1="属性值1"……>内容 所有的数据内容都必须在某个标记的开始和结束标记内,而每个标记又必须包含在另一个标记的开始与结束标记内,形成嵌套式的分布,只有最外层的标记不必被其他的标记所包含。最外层的是根元素(Root),又称文件(Document)元素,所有的元素都包含在根元素内。 在前面的Flowers.xml文件中,根元素就是,根元素必须而且只能有一个,在该文件有三个子元素,这样的元素可以有多个。 4.1.2 XML的基本语法 1. 注释 XML的注释与HTML的注释相同,以“”结束。 2. 区分大小写 在HTML中是不区分大小写的,而XML区分大小写,包括标记,属性,指令等。 3. 标记 XML标记与HTML标记相同,“<”表示一个标记的开始,“>”表示一个标记的结束。XML中只要有起始标记,就必须有结束标记,而且在使用嵌套结构时,标记之间不能交叉。 在XML中不含任何内容的标记叫做空标记,格式为:<标记名称/>

XML结构设计文档

辩论赛多功能系统 XML结构设计文档 设计说明 在本系统的三个分系统中储存的所有数据将通过XML的形式进行保存本设计文档详细的说明三个系统中需要的数据以及数据的呈现方式。 XML的解释 XMl是一种常见的文件数据储存结构。在文件中以树形结构体现数据的储存方式。树中包含所个节点,节点中有属性和值。属性和值都可以储存关于节点的信息。在本系统中由于要使用中文所有的编码都将使用utf-8储存。 数据类型说明 在下面体现的节点的属性和值中,说明编号的采用int型说明分数的采用float 其他没有相关说明的都是采用QString类型(QT中的字符串类型)。 数据体现方式 赛程编制系统的 辩论赛队伍信息 根节点队伍信息 子节点队伍属性:队伍编号队伍名所属学院或单位 子节点辩手属性:辩手编号辩手姓名辩手相关图片路径 … … … …

辩题库 根节点辩题库 子节点辩题属性:辩题号正方辩题反方辩题 … 辩论赛小组赛赛程分布信息 根节点小组赛赛程 子节点队伍属性:队伍编号 子节点对阵队伍属性:队伍编号胜负情况 … … … … 小组赛得分总结 根据上赛程最后的胜负情况进行得分的合计 根节点小组赛得分 子节点队伍属性:比赛积分 … 辩论赛系列赛对阵信息 胜者组 根节点胜者组比赛 子节点系列赛属性:次序比赛队伍个数比赛总场次子节点比赛属性:场次比赛辩题编号 子节点正方属性:比赛队伍编号 子节点反方属性:比赛队伍编号 … … … … 败者组 比赛数据形式与胜者组相同

比赛控制系统数据信息 比赛时间控制方案信息 根节点时间控制 子节点阶段属性:阶段名阶段计时阶段计时方式 或音乐路径视频路径图片路径 … … 比赛打分系统数据信息 打分表格数据 根节点表格属性打分人姓名打分日期比赛编号正方(反方)子节点打分项分数(可能略) 子节点打分项分数 … … 算分方法 根节点算分 子节点打分项算分方法 … …

XML创建与解析常用方法介绍

XML解析方式介绍 1.DOM4J(Document Object Model for Java) 虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。 为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。 在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java 开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。 DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J. 【优点】 ①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。 ②支持XPath。 ③有很好的性能。 【缺点】 ①大量使用了接口,API较为复杂。 2.SAX(Simple API for XML) SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX 采用的是事件模型。

XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较[收藏]

1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。DOM 采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然

后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。 3)JDOM https://www.360docs.net/doc/767672314.html,/ JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

四中最常用的XML文件解析总结

XML文件学习总结 掌握了XML文件解析的常用的4中方式:DOM解析、SAX 解析、STAX解析以及DOM4j解析XML文件。 一、DOM 解析xml文件 public List parse(String url) throws Exception{ // 1、创建解析工厂 D ocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//创建工厂是单例模式,不能直接new对象,需要调用newInstance来创建对象。 // 2、创建解析器 D ocumentBuilder builder = factory.newDocumentBuilder(); // 3、创建解析器的url F ile file = new File(url); // 4、得到解析后的Document对象 D ocument doncument = builder.parse(file); // 5、通过得到节点名字得到所有同名节点的集合NodeList N odeList nodeList = doncument.getElementsByTagName("student"); // 6、遍历NodeList集合 f or (int i = 0; i < nodeList.getLength(); i++) { // 得到每个节点对象 Node studentNode = nodeList.item(i); Student st = new Student(); NamedNodeMap map = studentNode.getAttributes(); //for(int j=0;j

org.w3c.dom(java dom)解析XML文档

位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的API: 1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.解析器:DocumentBuilder 创建方法:通过解析器工厂类来获得DocumentBuilder db = dbf.newDocumentBuilder(); 3.文档树模型Document 创建方法:a.通过xml文档 Document doc = db.parse("bean.xml"); b.将需要解析的xml文档转化为输入流InputStream is = new FileInputStream("bean.xml"); Document doc = db.parse(is); Document对象代表了一个XML文档的模型树,所有的其他Node都以一定的顺序包含在Document对象之内,排列成一个树状结构,以后对XML文档的所有操作都与解析器无关, 直接在这个Document对象上进行操作即可; 包含的方法:

4.节点列表类NodeList NodeList代表了一个包含一个或者多个Node的列表,根据操作可以将其简化的看做为数组 5.节点类Node

Node对象是DOM中最基本的对象,代表了文档树中的抽象节点。但在实际使用中很少会直接使用Node对象,而是使用Node对象的子对象Element,Attr,Text等 6.元素类Element 是Node类最主要的子对象,在元素中可以包含属性,因而Element中有存取其属性的方法

基于XML制作的新闻添加系统

基于XML制作的新闻添加系统 摘要:可延伸标记语言XML(eXtensible Markup Language)是SGML (Standard Generalized Markup Language)的一个子集...... 其目标是让一般的SGML能够在网站上被服务、接收与处理。如同 HTML一样,XML被设计成容易使用,并且能够与SGML及HTML共 同合作。XML的特点是电子数据交换(EDI)和灵活的开发。因为 XML是数据和格式分离设计的,所以XML元数据文件就是纯数据 的文件,这样就可以使用同一个数据源,显示多种样式了。当你 建立XML 文件时,你可以建立自己的元素并因需要为它们命名, 而不是只能使用那些受限制的预先定义好的元素群组,因而达成 了可延伸卷标语言中的“可延伸(extensible)”的特性。 关键词:XML(eXtended Markup Language)、数据链路、数据岛(data island) “可延伸标记语言XML(eXtensible Markup Language)是SGML (Standard Generalized Markup Language)的一个子集......其目标是让一般的SGML能够在网站上被服务、接收与处理。如同HTML一样,XML被设计成容易使用,并且能够与SGML及HTML共同合作。”①XML是从SGML进化来的。最初的SGML是为了解决文档及其格式问题的一种标记语言,所以非常的复杂和难以使用,那时计算机的应用水平还处在很低的阶段,并且那时人们只需要传递和显示一些简单的数据。因此,89年Tim Berners-lee依据SGML开发出一种非常简单的超文本格式,就叫HTML(HyperText Markup Language)。当计算机的应用水平也大幅度的提高的时候,人们已经开始对太简单的HTML感到不满意,因此又开始对其进行修改、升级,就这样HTML从1.0一直升到4.0的版本,扩展了许多的命令,可以让HTML解决更多的问题。但是,由于HTML本身的缺陷,为了解决更多的问题,而把简单的HTML变成一个非常复杂的,难以理解的语言,再加上HTML是把数据和显示格式一起存放的,如果我们只想使用数据而不需要格式,可以想象,分离这些数据和格式是多么的困难。而随着Internet的发展, 98年1月W3C公布了XML1.0版本,立即成为计算机史上一个重要的里程碑。

XML DOM

第六教案 课题:文档对象模型DOM 目的要求: ?理解DOM模型 ?解析XML文档,生成文档对象 ?操纵DOM模型的对象、接口、属性、方法、事件 重点难点: ?重点:使用DOM API提供的对象和接口对XML进行操作,主 要包括查询、添加、修改、删除接点等操作 ?难点:如何使用API 教学过程: 如图。 作业布置:

一、文档对象模型(DOM)概述 下面,我们将说明如何通过程序访问XML文档。其中一种方法是通过文档对象模型(Document Object Model,DOM)。在本章中,我们将介绍文档对象模型,并借助几个程序实例解释它的功能。 1.1什么是文档对象模型(DOM)? 文档对象模型一词在Web浏览器领域并不陌生。窗口、文档和历史等对象都被认为是浏览器对象模型的一部分。然而,任何做过Web开发的人都知道各种浏览器实现这些对象的方式不尽相同。对于如何通过Web访问和操作文档结构这个问题,为了创建更加标准化的方法,W3C提出了目前的W3C DOM规范。 W3C DOM是一种独立于语言和平台的定义,即:它定义了构成DOM的不同对象的定义,却没有提供特定的实现,实际上,它能够用任何编程语言实现。例如,为了通过DOM访问传统的数据存储,可以将DOM实现为传统数据访问功能之外的一层包装。利用DOM中的对象,开发人员可以对文档进行读取、搜索、修改、添加和删除等操作。DOM为文档导航以及操作HTML和XML文档的内容和结构提供了标准函数。 1.2常见的文档模型 常见的文档模型有三类: 线性模型、树型模型、对象模型。 DOM模型是对象模型。 1.3DOM的工作原理及DOM模型结构 当使用DOM对XML文本文件进行操作时,它首先要解析文件,将文件分解为

使用DOM4j解析xml文件

Xml文件: studentname 78 78 98 studentname 77 68 88 JAVA文件: import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** *DOM4j对xml文件的操作 *操作DOM4j的时候注意要导入3个jar包,否则会报异常 *dom4j-1.6.1.jar *jaxen-1.1-beta-6.jar *saxpath.jar **/ public class ReaderDom4j {

实验五 XML文档设计

实验五XML文档设计 一、实验目的 1.掌握在XML SPY中创建XML文档的方法 2.掌握在XML Spy中验证XML文件格式的正确性、有效性的方法 3.了解并掌握XML DTD的定义方法及其用途 4.了解并掌握DTD元素、属性、实体声明的基本语法 5.了解并掌握XMLSpy中基于DTD的XML文件输入 6.了解并掌握XML Schema的定义方法及其用途 7.了解并掌握Schema的基本结构、数据类型、元素、属性的声明 8.了解并掌握XMLSpy中基于Schema的XML文件输入 9.掌握使用XSL显示XML文件的基本方法 10.了解并掌握XML文档中使用CSS的引入式方法 11.了解并掌握使用XSL显示XML文件的基本方法 二、实验环境 Windows操作系统,XML SPY,IE。 三、实验内容 1. 在XMLSpy中输入如下XML文件,用IE打开观察一下效果。 2.创 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 2.建一个格式良好的xml文档,存储学生成绩的信息,包括:学号number、姓名name、成绩score。 上机实现并在浏览器中进行查看。 3.分析下列XML实例,编写外部DTD文档,并进行验证。 <学生名册> <学生学号=”A1”>

<姓名>张三 <性别>男 <年龄>20 <学生学号=”A2”> <姓名>李四 <性别>女 <年龄>19 <学生学号=”A3”> <姓名>王二 <性别>男 <年龄>20 4.分析下列DTD文档,上机编写有效的XML文档,并进行验证。 ]> 5.利用Schema定义XML文档 (1)对以下“个人信息.xml”进行Schema定义(设Schema文件名为“个人信息.xsd”) XML实用培训教程 张健飞 zjf@https://www.360docs.net/doc/767672314.html, 27元

xml文件解析

查找结点,读取结点属性------------------------------------------------------ 获取结点的属性------------------------------------- 设置结点的属性------------------------------------------------ 给结点添加新属性------------------------------------------- 设置一个结点的内容---------------------------------------------------- 添加新节点---------------------------------------------------- 编码问题------------------------------------------------------------------ XML树: John Fleck June 2, 2002 example keyword This is the headline This is the body text. 1:查找结点 #include #include #include #include #include Void parseStory (xmlDocPtr doc, xmlNodePtr cur) { xmlChar *key; cur = cur->xmlChildrenNode; while (cur != NULL) { if ((!xmlStrcmp(cur->name, (const xmlChar *)"keyword")))

XMLDOM手册

XMLDOM是用来访问和操作XML文档的编程接口规范。 1、简介 XMLDOM被设计为可用于任何语言和任何操作系统。借助DOM,程序员可以创建XML文档、遍历其结构,增、改、删其元素。DOM将整个XML文档视作一棵树,文档级的元素是树的根。 2、MS的XML解析,IE5.0以上。 是一个COM组件,至少包含下列对象: (1)Micosoft.XMLDOM (2)Micosoft.XMLDOM.parseError,有如下属性:

(5)NodeList的W3C规定的属性和方法。

async:一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作 userID 用户ID,用于服务器身份验证 password 用户密码,用于服务器身份验证 XMLHTTP对象的Send方法 用Open方法对Request对象进行初始化后,调用Send方法发送XML数据:poster.send XML-data Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send 进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。 XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示: 值说明 0 Response对象已经创建,但XML文档上载过程尚未结束 1 XML文档已经装载完毕 2 XML文档已经装载完毕,正在处理中 3 部分XML文档已经解析 4 文档已经解析完毕,客户端可以接受返回消息 客户机处理响应信息 客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的: ● responseTxt:将返回消息作为文本字符串; ● responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用; ● responseStream:将返回消息视为Stream对象。 下面的xml文件是动态生成的最后用xmlHTTP传送出去,这是一个在客户端JavaScript脚本里的内容,当然你也可以写在服务器,但是要相应的改一些东西:(仅供大家参考,了解它的用法) var xmlDoc=new ActiveXObject("MSXML2.DOMDocument"); flag=xmlDoc.loadXML(""); newNode =xmlDoc.createElement("编码") MarkNode=xmlDoc.documentElement.appendChild(newNode); newNode =xmlDoc.createElement("StartMark")

xml文档

XmlDocument xDoc = new XmlDocument(); xDoc.Load("X.xml"); foreach (XmlElement elem in xDoc.SelectNodes("/data/a/item")) Console.WriteLine(lst.InnerText); Console.ReadKey(); static void Main(string[] args) { XmlDocument xDoc = new XmlDocument(); xDoc.Load("X.xml"); XmlNodeList lst = xDoc.ChildNodes[1].ChildNodes[1].ChildNodes ; for (int i=0;i< lst.Count ;i++) Console.WriteLine(i.ToString()+lst.Item(i).Name ); foreach (XmlNode n in lst) Console.WriteLine(https://www.360docs.net/doc/767672314.html, ); Console.ReadKey(); } 读取有namespace的Xml 1001 2001 10055 120011 2000 static void Main(string[] args) { XmlDocument xDoc = new XmlDocument(); xDoc.Load("X.xml"); XmlNamespaceManager ns = new XmlNamespaceManager(https://www.360docs.net/doc/767672314.html,Table ); ns.AddNamespace("smmd", "nxchj"); foreach (XmlElement elem in xDoc.SelectNodes("/smmd:name/smmd:a",ns)) Console.WriteLine(elem.InnerText ); Console.ReadKey();

相关文档
最新文档