XML
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML 相关的知识,希望对你有一定的参考价值。
1 SAX
- 在使用DOM解析XML文档的时候,需要读取整个XML文档,在内存中构架代表整个DOM树的Document对象,从而再对XML文档进行操作。此种情况下,如果XML文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。
- SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才对文档进行操作。
- SAX采用事件处理的方式解析XML文件,利用SAX解析XML文档,涉及两个部分:解析器和事件处理器:
- 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。
- 解析器采用SAX方式在解析某个XML文档的时候,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方式时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
- 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松的得到SAX解析器解析到的数据,从而可以决定如何对数据进行处理。
- 示例:通过SAX解析xml文档,并将数据封装到javabean中
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<书架> <书> <书名>java从入门到放弃</书名> <作者>呵呵</作者> <售价>0.01</售价> </书> <书> <书名>c从入门到精通</书名> <作者>我好</作者> <售价>1.00</售价> </书> </书架>
package com; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 2017/10/28 * 说明: */ public class SAXDemo { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { List<Book> books = new ArrayList<>(); //使用SAXParserFactory创建SAX解析工厂 SAXParserFactory spf = SAXParserFactory.newInstance(); //通过SAX解析工厂得到解析对象 SAXParser sp= spf.newSAXParser(); //通过解析器对象得到一个XML的读取器 XMLReader xmlReader = sp.getXMLReader(); //设置读取器的事件处理器 xmlReader.setContentHandler(new DefaultHandler(){ private Book book = null; private String currentTagName;//当前读取的元素的名称 public void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException { if("书".equals(qName)){ book = new Book(); } currentTagName = qName; } public void endElement (String uri, String localName, String qName) throws SAXException { if("书".equals(qName)){ books.add(book);//读到书标记的结束,把书对象存起来 } currentTagName = null; } public void characters (char ch[], int start, int length) throws SAXException { if("书名".equals(currentTagName)){ book.setName(new String(ch,start,length)); } if("作者".equals(currentTagName)){ book.setAuthor(new String(ch,start,length)); } if("售价".equals(currentTagName)){ book.setPrice(new String(ch,start,length)); } } }); //解析xml文件 xmlReader.parse("D:\\code\\web\\src\\main\\webapp\\book.xml"); for(Book b:books){ System.out.println(b); } } }
2 DOM4j
- dom4j是一个简单、灵活的开发源代码的库。dom4j是由早起开发jdom的人分离出来而后独立开发的。与jdom不同的是,dom4j使用接口和抽象类,虽然dom4j的API相对复杂一些,但它提供了比jdom更好的灵活性。
- dom4j是一个非常优秀的java XML API,并且性能优异、功能强大和极其使用的特点。
以上是关于XML 的主要内容,如果未能解决你的问题,请参考以下文章
从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration