`

xml的解析DOM4J,DOM,SAX

    博客分类:
  • java
阅读更多
Dom和sax解析区别:
1.dom:(Document Object Model,文档对象模型) W3C组织推荐的一种处理方式
sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析
器都支持它。
2.使用Dom解析XML文档时,需要读取整个XML文档,在内存中架构架构代表整个DOM树的Document
对象,从而再对XML文档进行操作。在此种情况下,如果xml文档特别大,就会消耗计算机的大量
内存,并且容易导致内存溢出。
  SAX解析允许在操作读取文档的时候,即对文档进行处理,而不必等到整个文档加载完才会对
文档进行操作。

-------------DOM4J---------------------------
1.Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开
发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提
供了比JDOM更好的灵活性。
2.Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很
多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
3.使用Dom4j开发,需下载dom4j相应的jar文件。


DOM4j中,获得Document对象的方式有三种:
 
       1.读取XML文件,获得document对象            
                   SAXReader reader = newSAXReader();
             Document  
document = reader.read(new File("input.xml“ ));
 
       2.解析XML形式的文本,得到document对象.
                 String text = "<members></members>";
             Document
document = DocumentHelper.parseText(text);
 
       3.主动创建空document对象.
                Document document = DocumentHelper.createDocument();           
//创建根节点
                  Element root =document.addElement( "members");


元素Element操作:
//获取文档的元素.
     Element root = document.getRootElement();
//获取某个元素的指定名称的第一个子节点.
       Elementelement = element.element(“书名");
//获取某个元素的指定名称的所有子元素的集合
     List list = element.elements(“书名”);
//添加一个指定名称的子元素
     Element childEle = parentEle.addElement(“书名”);
//删除某个元素指定的子元素
       parentEle.remove(childEle);
 
属性Attribute操作
 
//获取某个元素的指定名称的属性对象
     Attribute attr = element.attribute(“id”);
//获取某个元素的指定名称的属性值
        String id = element.attributeValue(“id”);
//给元素添加属性或更新其值
     Attribute attr =element.addAttribute(“id”,”123”);
//删除某个元素的指定属性
     element.remove(attribute);
 
文本Text的操作
//获取某个元素的文本内容
     String text = element.getText();
//给某个元素添加或更新文本内容
        element.setText(“Tom”);
 
 
将文档写入XML文件.
1.文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new  FileWriter("output.xml"));
 writer.write(document);
 writer.close();
 
2.文档中含有中文,设置编码格式写入的形式.
OutputFormat format =OutputFormat.createPrettyPrint();// 指定XML编码     
                 format.setEncoding( “utf-8"); 
                XMLWriter writer = new XMLWriter(newFileWriter( "output.xml“
),format);
                 writer.write(document);
                 writer.close();

Xpath介绍:
1.      在xml文档中查找信息的语言
2.      通过元素和属性进行查找
3.      简化Dom4j查找节点的过程
4.       /students/student
5.       从根元素开始逐层找,以”/”开头
6.       //name
7.       直接获取所有name元素对象,以“//”开头
8.       //student/*
9.       获取所有student元素的所有子元素对象
10.   //student[1]或//student[last()]
11.   获取所有student元素的第一个或最后一个
12.   //student[@id]
13.   获取所有带id属性的student元素对象
14.   //student[@id=‘002']
15.   获取id等于002的student元素对象

l      获取所有符合条件的节点
•        document.selectNodes(StringxpathExpression)
       返回List集合
l      获取符合条件的单个节点
•        document.selectSingleNode(StringxpathExpression)
•        返回一个Node对象。    
•        如果符合条件的节点有多个,那么返回第一个。
Eg:
publicvoid testGetPriceByName() throws Exception {
           // 加载xml文件
            Document document = getDocument();
           String xpath="//书[@书名='JavaScript网页开发']/售价";
          List<Node> nodes=     document.selectNodes(xpath);
          for(Node node:nodes){
               if(node.getName().equals("售价")){
                    System.out.println(node.getText());}
          }  }


------------SAX解析----------
SAX解析思想:解析器和事件处理器
1.解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档
2.解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会调用
事件处理器的一个方法,解析器在调用事件处理器的方法时,就把当前解析到的xml的文件内容
作为参数,传递给事件处理器。
3.程序员编写事件处理器,通过事件处理器中方法的参数,得到解析的数据,对数据进行操作。
eg:
                 //1.创建解析工厂对象
          SAXParserFactory  factory=SAXParserFactory.newInstance();
               //2.用工厂对象产生解析器对象
          SAXParser parser= factory.newSAXParser();
              //3.用解析器对象得到一个读取器对象
         XMLReader xmlReader=parser.getXMLReader();
              //4.给读取器设置一个处理器
         xmlReader.setContentHandler(newMyContentHandler() );
              //用解析器去读取book.xml
        xmlReader.parse("src\\cn\\itcast\\day02\\book.xml");
其中MyContentHandle继承制DefaultHandler类,覆写需要的方法:
1.startDocument()
2.endDocument()
3.startElemnet()
4.endElment();
5.characters();
其中得到属性的方法:
attributes.getValue("方法名");
注:sax只能用于读取xml文件,无法作更新
------------Dom解析-----------------
主要的概念:
Node:xml文件所有对象的根接口  节点
Document:代表xml文件的整个内容的对象的接口
Element:代表某个元素或标签的对象的接口
Attr:代表某个元素的某个属性对象的接口
Text:代表标签体文本内容对象的接口

NodeList:代表包含多个Node接口对象的集合对象

可以对标签进行增(create)删(Delete)改(update)查(read)----CRUD
       读:查看所有的数据 有条件的查询数据 
       写入:将一个User对象的信息保存为一个user标签
       更新:创建一个有数据的user对象,根据其中的某个属性数据值去找对应的user标签,
将user对象的数据放到此user标签中
       删除:删除所有user标签,有条件的删除:id=2删除对应的user标签
操作的基本步骤:
1.加载xml文件得到Document()
Document document = getDocument();
2.得到根标签(uers标签)
Element usersEle =document.getDocumentElement();
3.得到跟标签的所有子标签(得到Users标签的所有子标签,返回一个NodeList)
NodeList nodeList =usersEle.getElementsByTagName("user");
4.遍历List进行操作。
for(int i=0;i<nodeList.getLength();i++){}
常用的方法:文档解析器工厂---->解析器对象----->用解析器解析xml文件得到Document对象

private Document getDocument() throwsParserConfigurationException,
                     SAXException,IOException {
              //创建一个文档解析器工厂对象
              DocumentBuilderFactorybuilderFactory = DocumentBuilderFactory
                            .newInstance();
              //根据工厂对象得到解析器对象password
              DocumentBuilderbuilder = builderFactory.newDocumentBuilder();
              //用解析器解析xml文件得到Document对象
              Documentdocument = builder.parse(new File(
                            "H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
              returndocument;
       }
     
保存信息: 思路:转移器工厂对象---->通过工厂得到转移器---->通过转移器将Document的数
据转移到文件中去

             private void saveDocument(Documentdocument)
                     throwsTransformerFactoryConfigurationError,
                     TransformerConfigurationException,TransformerException {
              // 创建一个转移器工厂对象
              TransformerFactory factory =TransformerFactory.newInstance();
              // 通过工厂对象得到一个转移器
              Transformer transformer =factory.newTransformer();
              // 通过转移器将Document的数据转移到users.xml文件中去
              DOMSource xmlSource = newDOMSource(document);
              StreamResultoutputTarget = new StreamResult(new File(
                            "H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
              transformer.transform(xmlSource,outputTarget);
       }

Node       appendChild(newChild)       将新的节点添加为最后一个子节点
       insertBefore(newChild,refChild) 在某个子节点前插入一个新子节点
       removeChild(oldChild)       删除指定的某个子节点
       replaceChild(newChild,oldChild)       将指定的子节点替换成新的子节点
       setTextContent(textContent) 设置文本内容(一般用在元素对象上)
       getNodeName()    得到节点名称(一般用在元素对象上)
       getParentNode()     得到父节点(一般用在元素对象上)
       getTextContent()   得到文本内容(一般用在元素对象上)
       getFirstChild()       得到第一个子节点
       getLastChild() 得到最后一个子节点
       getNextSibling()    得到下一个兄弟节点
       getPreviousSibling()      得到上一个兄弟节点



Document
       createElement(name)     创建一个指定名称的标签对象返回
       getDocumentElement()       得到xml文件根标签
       getElementById(id)       根据id属性值获取一个子标签对象
       getElementsByTagName(name)     根据标签名得到所有对应的子标签
Element       
       setAttribute(name,value)     设置属性的名称和值
       removeAttribute(attrName)   根据属性名删除对应的属性值
       getAttribute(attrName)   根据属性名得到相应的属性值
       getElementsByTagName(name)     根据标签名得到对应的子标签
       getTagName() 得到标签名

Attr、Text      极少直接操作这两个接口的对象,一般通过Element对象来操作
NodeList getLength()得到包含的节点对象的个数 item(index)根据下标得到某个节点 

转自:http://blog.csdn.net/wd916913/article/details/8088033  
分享到:
评论

相关推荐

    dom4j下sax解析xml

    总结起来,dom4j库提供了DOM和SAX两种XML解析方式,而SAX解析在处理大文件时具有性能优势。通过注册事件处理器,开发者可以在解析过程中动态响应XML结构,实现灵活的数据处理。在实际工作中,选择合适的解析方法取决...

    XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细

    常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...

    dom,dom4j,sax 解析xml文件实例

    使用DOM4J解析XML,首先需要导入DOM4J库,然后使用`DocumentHelper`类的`parseText()`或`parse()`方法。比如: ```java Document doc = DocumentHelper.parseText(new File("testxml.xml").getText()); Element root...

    xml 三种解析方式dom,sax,dom4j

    为了处理XML文档,有三种主要的解析方式:DOM、SAX和DOM4J。每种方法都有其特点和适用场景,下面将详细介绍这三种解析方式。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,构建一个树形...

    解析XML的dom、sax和dom4j的jar包

    在Java中,解析XML有多种方法,主要包括DOM、SAX和DOM4J。下面将详细介绍这三种解析方式及其对应的jar包。 1. DOM (Document Object Model) DOM是一种基于树形结构的XML解析方法,它将整个XML文档加载到内存中,...

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在处理大型XML文件时节省内存。 7. **与JAXB集成**:DOM4J可以与Java Architecture for XML ...

    dom4j下的sax解析xml

    DOM4J库是Java中广泛使用的XML处理工具,它提供了SAX解析XML的功能。SAX(Simple API for XML)是一种事件驱动的解析器,适用于处理大型XML文档,因为它不需要将整个文档加载到内存中,因此在处理大文件时比DOM...

    用4中方式(dom4j、jdom、dom、sax)解析xml

    本文将详细介绍四种主流的Java XML解析方式:DOM4J、JDOM、DOM和SAX。 1. DOM(Document Object Model) DOM是W3C推荐的标准解析XML的方式,它将整个XML文档加载到内存中,构建一个树形结构的文档对象模型。通过DOM...

    xmldom4j解析

    本教程将深入探讨XML DOM4J解析的相关知识点。 一、DOM4J基本概念 DOM4J是一种灵活的Java API,其设计目标是简化XML处理,提供高效且易于使用的API。与标准的DOM(Document Object Model)相比,DOM4J更轻量级,...

    xml&dom&sax&dom4j 代码编写和总结

    对于xml&dom&sax&dom4j 文件解析的代码总结

    Java使用sax、dom、dom4j解析xml文档

    以下是一个DOM4J解析XML的简单示例: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Dom4jExample { public static void main(String[] args) {...

    dom4j---xml解析jar包

    **DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...

    Android 创建与解析XML Dom4j方式

    Dom4j提供了DOM、SAX和STAX等多种解析策略,使得处理XML文档变得更加便捷。在Android中,由于DOM解析器内存消耗较高,不适合大型XML文件,所以我们通常会选择性能更好的Dom4j库。 **创建XML文档:** 1. 引入Dom4j...

    dom+dom4J+SAX 解析

    2. DOM4J解析: DOM4J是Java中一个灵活且功能强大的XML处理库,它是DOM的一个扩展,提供了更高级的功能和更好的性能。DOM4J不仅支持DOM,还支持SAX和StAX解析器。它简化了XML的读写操作,比如使用`Document`、`...

    java操作xml dom dom4j sax jdom

    为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document Object Model) DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个...

    生成、解析xml的四种方式(dom,dom4j,sax,jdom)

    本文将详细介绍生成和解析XML的四种主要方法:DOM、DOM4J、SAX和JDOM。 1. DOM(Document Object Model) DOM是W3C组织推荐的一种解析XML的标准方式。它将XML文档视为一个树形结构,每个节点代表XML文档的一部分。...

    DOM4J xml解析工具

    DOM4J的名字来源于Document Object Model (DOM) 和 Java的结合,但它并不局限于DOM模型,同时也支持SAX和STAX解析器,因此在处理大型XML文件时,它能提供比纯DOM更好的性能。 XML(eXtensible Markup Language)是...

    XML 文件解析 DOM DOM4j JDOM SAX 和相对路径的写法 ,代码是有注释的

    本教程将详细介绍四种主要的XML解析方式:DOM、DOM4j、JDOM和SAX,以及如何在Java中处理XML文件的相对路径。 1. DOM(Document Object Model) DOM是W3C推荐的一种解析XML的标准,它将XML文档转化为一个树形结构,...

    dom4j解析xml文件的压缩包

    5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...

    JDK自带xml解析器dom+sax

    JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax

Global site tag (gtag.js) - Google Analytics