基于SAX和DOM的XML嵌套信息提取

合集下载

基于SAX和DOM的XML嵌套信息提取

基于SAX和DOM的XML嵌套信息提取

基于SAX和DOM的XML嵌套信息提取
雷庆;吴扬扬
【期刊名称】《计算机工程与设计》
【年(卷),期】2004(025)012
【摘要】层次关系是一份XML文件的重要信息.根据XML文件的设计规则,当它要描述的数据具有层次关系时,这种层次关系应该反映在相应的标记里面.因此,如果我们对一份XML文件进行分析,对其标记的层次关系进行提取,那么我们就得到了这些标记所描述的数据之间的层次关系.使用SAX和DOM两种机制,分别对XML 文件进行了分析并对其标记所反映的层次关系进行了提取.
【总页数】4页(P2308-2311)
【作者】雷庆;吴扬扬
【作者单位】华侨大学,计算机系,福建,泉州,362011;华侨大学,计算机系,福建,泉州,362011
【正文语种】中文
【中图分类】TP393.0
【相关文献】
1.基于SAX的XML数据解析技术分析研究 [J], 刘雨潇
2.基于DOM与SAX的数据存取技术研究与实现 [J], 李发英
3.XML编程中的DOM与SAX技术 [J], 赵俊岚
4.XML文件解析中SAX和DOM的结合应用 [J], 范书义;李岩;孟晨
5.基于Sax的嵌入式轻量级xml解析实现 [J], 刘青云;马文跃;焦铬
因版权原因,仅展示原文概要,查看原文内容请购买。

XML文件解析中SAX和DOM的结合应用

XML文件解析中SAX和DOM的结合应用

XML文件解析中SAX和DOM的结合应用范书义;李岩;孟晨【期刊名称】《微型电脑应用》【年(卷),期】2011(027)012【摘要】According the characteristics of two methods of parsing XML documents-SAX and DOM, this paper discusses when we should use two methods together to parse documents. Then we provide common procedure of using SAX and DOM together. At last, by parsing different size of XML documents, this paper compare the performance of DOM with SAX and DOM used together. The test results indicate that when parsing large XML document, using SAX and DOM together can improve the performance of parsing program greatly.%针对目前XML文档的两种解析方法SAX和DOM各自的特点,探讨了在哪些情况下适宜将两种解析方法结合应用对文档进行解析,并给出了SAX和DOM结合应用的一般方法,最后对单纯采用DOM 和两种方法结合解析XML文档的性能进行了比较.实验结果表明,将SAX和DOM 结合使用,在解析大XML文档时,可以极大地提高解析程序的性能.【总页数】3页(P42-44)【作者】范书义;李岩;孟晨【作者单位】军械工程学院,石家庄,050003;军械工程学院,石家庄,050003;军械工程学院,石家庄,050003【正文语种】中文【中图分类】TP391【相关文献】1.SAX API在数据库表单-XML文档变换中的应用研究 [J], 祁明龙;熊前兴2.XML文件解析技术在边界扫描测试中的应用 [J], 王春艳;史军军3.XML语法特性在SAX中的应用研究 [J], 蔡七华;王明强4.XML编程中的DOM与SAX技术 [J], 赵俊岚5.基于SAX和DOM的XML嵌套信息提取 [J], 雷庆;吴扬扬因版权原因,仅展示原文概要,查看原文内容请购买。

xml中常用的方法

xml中常用的方法

xml中常用的方法XML是一种常用的标记语言,用于描述数据的结构和内容。

在XML中,有许多常用的方法和技巧,可以帮助我们更好地处理和操作XML数据。

本文将介绍一些常用的XML方法,帮助读者更好地理解和应用XML。

一、解析XML的方法XML文件的解析是我们处理XML数据的第一步。

常用的解析方法有DOM解析和SAX解析。

DOM解析将整个XML文件加载到内存中,以树形结构表示,可以方便地对XML进行遍历和操作。

而SAX解析是一种基于事件驱动的解析方法,逐行读取XML文件,可以快速解析大型XML文件,但对于复杂的XML结构操作较为麻烦。

二、获取元素节点的方法在XML中,元素节点是XML数据的主要组成部分。

我们可以使用getElementById、getElementsByTagName、getElementsByTagNmeNS等方法来获取元素节点。

其中,getElementById方法根据元素的id属性获取元素节点;getElementsByTagName方法根据元素的标签名获取元素节点;getElementsByTagNmeNS方法在命名空间内获取元素节点。

三、获取属性值的方法在XML元素中,可以包含一些属性,用于描述该元素的特性。

我们可以使用getAttribute方法来获取元素的属性值。

该方法需要传入属性名作为参数,返回属性值。

四、修改节点和属性的方法在XML中,我们可以使用appendChild、insertBefore、removeChild等方法来对节点进行增加、删除和替换操作。

另外,我们还可以使用setAttribute、removeAttribute等方法来对属性进行修改和删除。

五、遍历XML节点的方法遍历XML节点是XML操作中常用的方法之一。

我们可以使用childNodes、firstChild、nextSibling等方法来遍历XML节点。

其中,childNodes方法返回当前节点的所有子节点;firstChild方法返回当前节点的第一个子节点;nextSibling方法返回当前节点的下一个兄弟节点。

XML.03-DOM和SAX解析

XML.03-DOM和SAX解析

XML.03-DOM和SAX解析解析xml常⽤的有两种⽅式,DMO和SAXDOM和SAX的区别:DOM:在内存中⽣成树桩结构优点是可以⽀持增删改查各种操作缺点在于,如果⽂档过⼤的时候,可能会产⽣内存溢出的风险SAX:基于事件驱动,边读边解析优点:占⽤内存⼩缺点,不⽀持增删改操作.(DOM4J会在内存中⽣成树状结构,虽然是SAX⽅式解析…)XML的DOM解析xml的DOM解析,主要会⽤到两个包中的类javax.xml.parsers :⽤来解析javax.xml.transform:⽤来回写解析public static Document getDocument(String src)throws Exception{//获取⼯⼚类DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//获取解析器DocumentBuilder builder = factory.newDocumentBuilder();//返回Document(org.w3c.dom.Document)return builder.parse(src);}处理在拿到document之后,就可以想⼲哈就⼲哈了.在元素末尾增加⼀个⼦元素/*** DOM⼤法之--在元素末尾增加⼀个元素* @throws Exception*/public static void addElementTest()throws Exception{//解析Document document = JaxpDomUtils.getDocument("src/book.xml");//处理NodeList nodeList = document.getElementsByTagName("书");Node book2 = nodeList.item(1);Element cat = document.createElement("cat");cat.setTextContent("I am a cat");book2.appendChild(cat);//回写JaxpDomUtils.writeBack(document, "src/book.xml");}这个地⽅需要注意,Node和Element. Node表⽰⽂档树上的⼀个节点,这个⽂档不局限于HTML或者XML,⽽element表⽰HTML或者xml中⼀个元素.在任意位置增加元素/*** DOM⼤法之--在任意位置增加元素* @throws Exception*/public static void addElementAnyWhereTest()throws Exception{Document document = JaxpDomUtils.getDocument("src/book.xml");Node book2 = document.getElementsByTagName("书").item(1);Node author2 = document.getElementsByTagName("作者").item(1);Element cat = document.createElement("cat");cat.setTextContent("I am a cat too");book2.insertBefore(cat, author2);JaxpDomUtils.writeBack(document, "src/book.xml");}删除⼀个节点/*** DOM⼤法之--删除⼀个元素* @throws Exception*/public static void deleteNodeTest()throws Exception{Document document = JaxpDomUtils.getDocument("src/book.xml");Node cat1 = document.getElementsByTagName("cat").item(0);Node book = cat1.getParentNode();book.removeChild(cat1);JaxpDomUtils.writeBack(document, "src/book.xml");}这⾥⽐较蛋疼的是,必须先找到要删除的元素,然后再找他爹,然后通过他爹的remove⽅法把它删掉…改/*** DOM⼤法之--修改元素* @throws Exception*/public static void changeNodeTest()throws Exception {Document document = JaxpDomUtils.getDocument("src/book.xml");Node author2 = document.getElementsByTagName("作者").item(1);author2.setTextContent("西川结⾐");JaxpDomUtils.writeBack(document, "src/book.xml");}查找/*** DOM⼤法之--删除⼀个元素* @throws Exception*/public static void deleteNodeTest()throws Exception{Document document = JaxpDomUtils.getDocument("src/book.xml");Node cat1 = document.getElementsByTagName("cat").item(0);Node book = cat1.getParentNode();book.removeChild(cat1);JaxpDomUtils.writeBack(document, "src/book.xml");}Node下⾯有很多get⽅法,需要的时候再翻⽂档吧.回写public static void writeBack(Document document, String dest)throws Exception{//回写的⼯⼚类TransformerFactory factory = TransformerFactory.newInstance();Transformer transformer = factory.newTransformer();transformer.transform(new DOMSource(document), new StreamResult(dest));}XML的SAX解析SAX和DOM⽅式的不同:DOM需要将整个XML⽂件都读取后再进⾏解析,如果XML⽂档⾮常⼤,就会消耗计算机的⼤量内存,并且容易导致内存溢出SAX 是边读边解析.SAX解析原理SAX⽅式和DOM⽅式的套路差不多. 只有⼀点不⼀样,SAX⽅式没有增删改的功能,只是单纯的读取解析,所以就没有回写的必要了.这玩意⼉主要的⽅法,⼤概是这个样⼦的:void parse(String uri, DefaultHandler dh)那么这⾥就涉及到两个东西:解析器:获取解析器⼯⼚获取解析器对象解析XML(XML ⽂件路径,事件处理器)解析器采⽤SAX⽅式在解析某个XML⽂档时,它只要解析到XML⽂档的⼀个组成部分,都会去调⽤事件处理器的⼀个⽅法,解析器在调⽤事件处理器的⽅法时,会把当前解析到的xml⽂件内容作为⽅法的参数传递给事件处理器。

基于DOM与SAX的数据存取技术研究与实现

基于DOM与SAX的数据存取技术研究与实现

中图分类号:TP311 文献标识码:A 文章编号:1009-2552(2009)02-0051-04基于DOM与SAX的数据存取技术研究与实现李发英(湘南学院计算机科学系,郴州423000)摘 要:为了满足基于WE B的复杂应用,出现了X M L。

由于它具有可扩展性和简单性,使得与X M L相关的技术不断成熟。

详细讨论了基于X M L实现分布式环境下数据存取方法,重点介绍了基于DOM和S AX的数据存取机制及其实现。

关键词:DOM;S AX;X M L;分布式计算R esearch and implementation of data accessmethod based on DOM and SAXLI Fa2ying(Dep artment of Computer Science,Xiangnan U niversity,Chenzhou423000,China) Abstract:In order to realize com plex WE B application,X M L is designed.X M L is featured by its extensibility and sim plicity.At the same time,m ost of the technologies related to X M L are mature.Data storage method based on X M L in distributed environment is discussed.Especially the mechanism and realization of DOM and S AX technology are em phasized.K ey w ords:DOM;S AX;X M L;distributed com putation0 引言从1996年开始W3C(W orld W ide W eb C ons ortium)的一个工作组致力于设计一个超越HT M L能力范围的新语言,这个语言后来被命名为X M L(Extensible Markup Language)即可扩展标记语言。

sax 和dom解析xml文件

sax 和dom解析xml文件

XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。

基本的解析方式有两种,一种叫SAX,另一种叫DOM。

SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。

假设我们XML的内容和结构如下:本文使用JAVA语言来实现DOM与SAX的XML文档生成与解析。

首先定义一个操作XML文档的接口XmlDocument 它定义了XML文档的建立与解析的接口。

1.DOM生成和解析XML文档为 XML 文档的已解析版本定义了一组接口。

解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。

优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

package com.alisoft.facepay.framework.bean;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;/**** @author hongliang.dinghl* DOM生成与解析XML文档*/public class DomDemo implements XmlDocument {private Document document;private String fileName;public void init() {try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();this.document = builder.newDocument();} catch (ParserConfigurationException e) {System.out.println(e.getMessage());}}public void createXml(String fileName) {Element root = this.document.createElement("employees");this.document.appendChild(root);Element employee = this.document.createElement("employee"); Element name = this.document.createElement("name");name.appendChild(this.document.createTextNode("丁宏亮")); employee.appendChild(name);Element sex = this.document.createElement("sex");sex.appendChild(this.document.createTextNode("m")); employee.appendChild(sex);Element age = this.document.createElement("age");age.appendChild(this.document.createTextNode("30"));employee.appendChild(age);root.appendChild(employee);TransformerFactory tf = TransformerFactory.newInstance();try {Transformer transformer = tf.newTransformer();DOMSource source = new DOMSource(document);transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312"); transformer.setOutputProperty(OutputKeys.INDENT, "yes");PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); StreamResult result = new StreamResult(pw);transformer.transform(source, result);System.out.println("生成XML文件成功!");} catch (TransformerConfigurationException e) {System.out.println(e.getMessage());} catch (IllegalArgumentException e) {System.out.println(e.getMessage());} catch (FileNotFoundException e) {System.out.println(e.getMessage());} catch (TransformerException e) {System.out.println(e.getMessage());}}public void parserXml(String fileName) {try {DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse(fileName);NodeList employees = document.getChildNodes();for (int i = 0; i < employees.getLength(); i++) {Node employee = employees.item(i);NodeList employeeInfo = employee.getChildNodes();for (int j = 0; j < employeeInfo.getLength(); j++) {Node node = employeeInfo.item(j);NodeList employeeMeta = node.getChildNodes();for (int k = 0; k < employeeMeta.getLength(); k++) {System.out.println(employeeMeta.item(k).getNodeName()+ ":" + employeeMeta.item(k).getTextContent());}}}System.out.println("解析完毕");} catch (FileNotFoundException e) {System.out.println(e.getMessage());} catch (ParserConfigurationException e) {System.out.println(e.getMessage());} catch (SAXException e) {System.out.println(e.getMessage());} catch (IOException e) {System.out.println(e.getMessage());}}}2.SAX生成和解析XML文档为解决DOM的问题,出现了SAX。

XML解析之DOM详解及与SAX解析方法的比较

XML解析之DOM详解及与SAX解析方法的比较

XML解析之DOM详解及与SAX解析⽅法的⽐较XML解析(DOM)XML⽂件解析⽅法介绍我们所⽤到的NSXMLParser是采⽤SAX⽅法解析SAX(Simple API for XML)只能读,不能修改,只能顺序访问,适合解析⼤型XML,解析速度快常应⽤于处理⼤量数据的XML,实现异构系统的数据访问,实现跨平台从⽂档的开始通过每⼀节点移动,定位⼀个特定的节点DOM(Document Object Model)不仅能读,还能修改,⽽且能够实现随机访问,缺点是解析速度慢,适合解析⼩型⽂档⼀般应⽤与⼩型的配置XML,⽅便操作为载⼊到内存的⽂档节点建⽴类型描述,呈现可横向移动、潜在巨⼤的树型结构在内存中⽣成节点树操作代价昂贵NSXMLParser解析1.创建NSXMLParser实例,并传⼊从服务器接收的XML数据2.定义解析器代理3.解析器解析4.通过解析代理⽅法完成XML数据的解析使⽤XML解析⽂档时使⽤协议<NSXMLParserDelegate>,实现它的代理⽅法1. 开始解析某个元素,会遍历整个XML,识别元素节点名称- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:2. ⽂本节点,得到⽂本节点⾥存储的信息数据,对于⼤数据可能会接收多次!为了节约内存开销- (void)parser:foundCharacters:3. 结束某个节点,存储从parser:foundCharacters:⽅法中获取到的信息- (void)parser:didEndElement:namespaceURI:qualifiedName:注意:在解析过程中,上述三个⽅法会不停的重复执⾏,直到遍历完成为⽌4. 开始解析XML⽂档- (void)parserDidStartDocument:5. 解析XML⽂档结束- (void)parserDidEndDocument:6. 解析出错- (void)parser:parseErrorOccurred:在XMLParser解析过程中,还需要实现NSXMLParserDelegate代理⽅法如果⼀个XML⽂件中包含多个对象在解析过程中,为了能够正确解析中⽂档中的数据,需要注意⼀下⼏点:1.当前解析出得是对象还是元素值?如果是对象,需要判断当前对象时第⼏个,是第⼀个对象,还是第⼆、第三……,如果是第N个,需要将第N-1的对象值取出保存。

DOM和SAX在XML文件产生器中的应用的开题报告

DOM和SAX在XML文件产生器中的应用的开题报告

DOM和SAX在XML文件产生器中的应用的开题报告开题报告:DOM和SAX在XML文件产生器中的应用1.研究背景XML是一种常用的数据交换格式,也是一种表示和存储数据的标准方式。

在了解XML的使用过程中,为了更好地生成XML文件,需要对DOM和SAX模型有一定的了解。

通过DOM模型,可以将整个XML文件加载到内存中,形成一颗树形结构进行访问和修改。

而SAX模型则是一种基于事件驱动的解析方式,通过解析XML文件中的每个元素和属性,一次性传递给应用程序进行处理。

所以,研究DOM和SAX在XML文件产生器中的应用可以为XML文件的生成提供更加高效和灵活的方法。

2. 研究目的本文主要研究DOM和SAX在XML文件产生器生成XML文件中的实际应用,探索DOM和SAX在XML文件处理中的优缺点,为程序员在不同场景下选用最适合的方法提供一些基准和参考。

3. 研究内容和步骤本文将会对DOM和SAX两种模式在XML文件处理中的应用进行研究,具体研究内容和步骤如下:(1) 研究DOM在XML文件生成中的应用* 了解DOM模型的基本特点及使用方式* 实现一个基于DOM模式的XML文件生成器* 对比DOM模式和其他方法的优缺点,探讨适用场景(2) 研究SAX在XML文件生成中的应用* 了解SAX模型的基本特点及使用方式* 实现一个基于SAX模式的XML文件生成器* 对比SAX模式和其他方法的优缺点,探讨适用场景(3) 对比DOM和SAX在XML文件生成中的应用* 分别实现基于DOM和SAX模式的XML文件生成器* 分析两种方法的优缺点,探讨适用场景4. 研究意义本文通过研究DOM和SAX在XML文件生成中的应用,能够为程序员提供更加高效和灵活的生成XML文件的方法。

同时,通过对比DOM和SAX两种模式的使用优缺点,能够更好地为开发者选择合适的API提供帮助,提高编程工作的效率和质量。

5. 文献综述目前关于DOM和SAX在XML文件生成中的应用的相关文献较少,需要进一步深入研究。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

万方数据
万方数据
万方数据
DocumentBuilderFactorydbf=DocumentBuilderFactory,newlnstance0;
DocumentBuilderdb=null;
Documentdoe=null;
ny

db=dbf.newDocumentBuilder0;//et]建DOM分析器
doc=db.parse锄e);//分析XML文件,结果元素存放于doc中

traverse(doe);//一一遍历DOM树以启动回调机制一.
returnelements;//返回结果元素

・DOMParsarWrapper类中遍历XML树的方法Ⅱavei*se
pnvate
void岫verse(Noden)∥遍历XML树

inttype=ft.getNodeType0;
switch(type)

caseNodeELEMENT—NODE://调用startElement处理开始标记
thisstartElement()
caseNode.TEXTNODE://调用character处理文本元素
thischaracters(data,0,data.1ength);
break;

for(Nodechild=ngetFirstChild0;child扛null;
child=child.getNextSiblin90)

traverse(ehild):
咀2SAX分楫器骨桶姥果

switch(type)

caseNode.ELEMENTNODE://调用endElement处理结束标记
thisendElement()
break;


・处理开始元素,结束元素和文本元素的方法与SAX中的startElement、endElement以及character完全相同。

4实验结果
(1)使用SAX分析器分析上述employee.xml文件的实验结果如图2所示。

(2)使用DOM分析器分析employeexml文件的结果如图3所示。

图3DOM分析嚣分析结果
5结语
本文使用了SAX和DOM两种机制对XML文件进行分析,并对其标记所反映的层次关系进行了提取。

实验结果表明,该方法能较好地提取出XML文档的嵌套信息,可应用到XML文档的聚类和分类等技术中,并进一步为各种各样的数据挖掘应用服务。

参考文献:
[1]陈锦辉,王景皓XML与Java程序设计大全[M】.北京:中国铁道出版社,2002
[2]李江,张威实例解析XML/XSL/Java网络编程[M]北京:北京希望电子出版社,2002.
[3]李诚,司昌龙,张志新.完全掌握JBuilder8[M]北京:机械工业
出版社,2003.万方数据。

相关文档
最新文档