xml有哪些解析技术?区别是什么?
DOM:
处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问。
下面给出一个DOM解析xml文件的例子。
package parse.impl;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import parse.ParseXml;
import vo.Person;
public class DomXml implements ParseXml{
public List<Person> getPersons(InputStream inputStream) throws Exception {
List<Person> persons = new ArrayList<Person>();
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream);
Element element = document.getDocumentElement();
/**
* 获取person标签
*/
NodeList personNodes = element.getElementsByTagName("person");
/**
* 逐个处理person
*/
for(int i=0;i<personNodes.getLength();i++){
Element personElement = (Element)personNodes.item(i);
Person person = new Person();
//取出id
person.setIdCard(Integer.parseInt(personElement.getAttribute("idCard")));
//person的子节点
NodeList childNodes = personElement.getChildNodes();
//逐个处理子节点
for(int j=0;j<childNodes.getLength();j++){
System.out.println("节点"+j+":"+childNodes.item(j).getNodeName());
//判断是否是元素节点
if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){
//判断子节点名称
if("name".equals(childNodes.item(j).getNodeName())){
person.setName(childNodes.item(j).getFirstChild().getNodeValue());
}else if("age".equals(childNodes.item(j).getNodeName())){
person.setAge(Integer.parseInt(childNodes.item(j).getFirstChild().getNodeValue()));
}else if("sex".equals(childNodes.item(j).getNodeName())){
person.setSex(childNodes.item(j).getFirstChild().getNodeValue());
}
}
}
persons.add(person);
}
return persons;
}
}
该例子的运行结果为:
节点0:#text
节点1:name
节点2:#text
节点3:age
节点4:#text
节点5:sex
节点6:#text
节点0:#text
节点1:name
节点2:#text
节点3:age
节点4:#text
节点5:sex
节点6:#text
idcard:1001,name:周健儿,age:52,sex:女
SAX:
SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
同样给出一个例子。
package parse.impl;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import parse.ParseXml;
import vo.Person;
public class SaxXml extends DefaultHandler implements ParseXml {
List<Person> persons = new ArrayList<Person>();
protected void init(InputStream inputStream){
try{
SAXParserFactory spFactory = SAXParserFactory.newInstance();
SAXParser parser = spFactory.newSAXParser();
parser.parse(inputStream, new SaxXml());
}catch(Exception e){
e.printStackTrace();
}
}
public List<Person> getPersons(InputStream inputStream) throws Exception {
init(inputStream);
return persons;
}
@Override
public void endDocument() throws SAXException {
System.out.println("解析完毕");
}
@Override
public void skippedEntity(String name) throws SAXException {
System.out.println("这个在哪里"+name);
}
/**
* 开始标记调用
*/
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
for(int i=0;i<attributes.getLength();i++){
System.out.println("节点属性名称:"+attributes.getQName(i));
System.out.println("节点属性值:"+attributes.getValue(i));
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println("节点数据:"+new String(ch,start,length));
}
/**
* 文件打开时调用该方法
*/
@Override
public void startDocument() throws SAXException {
System.out.println("开始解析xml文档");
}
}
运行结果:
开始解析xml文档
STAX:Streaming API for XML (StAX)
分享到:
相关推荐
XML解析技术是XML应用的核心,它涉及将XML文档转换为可处理的结构化数据。XML,全称为eXtensible Markup Language,是一种元语言,用于描述结构化数据,独立于编程语言、操作系统和传输协议。W3C联盟自1996年开始...
易语言XML解析是编程领域中的一个重要主题,尤其对于使用易语言进行开发的程序员来说,理解并掌握XML(可扩展标记语言)的解析方法是至关...通过深入学习和实践,开发者能够熟练运用XML解析技术,实现高效的数据操作。
java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析...
Java 中四种 XML 解析技术 XML 是一种广泛应用于数据存储和交换的标记语言,而 Java 是一种广泛应用于软件开发的编程语言。因此,在 Java 中解析 XML 文件是一个非常重要的任务。目前,Java 中有多种 XML 解析技术...
Java中的四种XML解析技术主要包括DOM、SAX、StAX(Streaming API for XML)以及Pull解析。每种技术都有其独特的应用场景和优缺点,下面将详细解释这些知识点。 ### DOM(Document Object Model) DOM是一种用于...
### XML解析技术分析与总结 #### 摘要与引言 随着XML(可扩展标记语言)在各行各业中的广泛应用,大量的信息开始通过XML文档来进行存储和交换。因此,XML解析技术成为了XML应用的关键部分。XML解析技术的主要目标...
- **简介**:DOM(Document Object Model)是另一种常用的XML解析技术,它将整个XML文档加载到内存中,并构建一个树状结构,允许程序对文档进行任意操作。 - **特点**: - **灵活性高**:可以任意访问和修改文档中的...
在LabVIEW(Laboratory Virtual Instrument Engineering Workbench)这个强大的图形化编程环境中,XML解析器是处理和操作XML数据的关键工具。本示例主要展示了如何在LabVIEW中实现XML文件的加载、保存和解析。 首先...
3. DOM模型的使用及解析过程:在XML技术中,文档对象模型(DOM)是一个跨平台的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM模型将XML文件以树状结构呈现,每个节点表示XML文件中的一个元素...
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C++,...
本篇文章将深入探讨XML解析的基本概念、解析方式以及在实际应用中的重要性。 一、XML的基本结构 1. 元素:XML文档的核心是元素,元素以尖括号 `和 `>` 包裹,如 `<element>`。元素可以包含其他元素、属性和文本。...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它以其结构化、自解释...无论是解析配置文件、交换数据还是构建复杂的XML结构,理解并熟练掌握XML解析技术对于任何IT专业人员来说都至关重要。
本文将详细介绍XML解析文件的两种主要方式:SAX(Simple API for XML)和DOM(Document Object Model)。 **1. DOM解析** DOM解析方式是将整个XML文档加载到内存中,构建一个树形结构,称为DOM树。这个树的每个...
为了处理XML文档,Java提供了多种解析技术。本篇文章将深入探讨四种主要的XML解析技术——DOM、SAX、StAX以及JAXB,并进行详细的分析与对比。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中...
### XML解析技术是XML应用的关键 #### 概述 随着信息技术的发展,XML(可扩展标记语言)作为一种标准化的数据表示和交换格式,在多个领域得到广泛应用。XML文档具备良好的结构化特性,能够实现跨平台、跨系统的...
### XML应用的基石:XML解析技术 #### 一、引言 XML(可扩展标记语言)作为一种被W3C组织认可的文档数据格式标准,在近年来得到了广泛应用。它源自SGML(标准通用标记语言),保留了SGML的主要功能,同时简化了其...
通过研究这个“java心电图xml解析.zip”中的源码,可以深入理解如何在实际项目中应用XML解析技术,以及如何处理特定领域(如医疗)的数据。同时,这也提供了一个学习和实践Java XML解析能力的好机会。
这个项目涉及的是使用C++编程语言实现对MusicXML文件的解析和布局处理。 首先,MusicXML文件包含了音乐作品的完整结构,包括音符、节奏、动态标记、表情记号、和弦、调性、拍子等元素。解析MusicXML文件的过程是将...
本文将深入探讨XML解析和生成工具的相关知识,以及如何利用提供的`Markup.cpp`和`Markup.h`文件进行操作。 XML的结构: XML文档由一系列元素构成,每个元素都有一个开始标签和结束标签,如 `<tag>` 和 `</tag>`。...