java中四种方式解析XML文件
来源:互联网 发布:手环源码 编辑:程序博客网 时间:2024/05/20 00:35
1.DOM方式解析XML
Dom解析是将xml文件全部载入到内存,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,与平台无关,java提供的一种基础的解析XML文件的API,理解较简单,但是由于整个文档都需要载入内存,不适用于文档较大时。
2.SAX方式解析XML
基于事件驱动,逐条解析,适用于只处理xml数据,不易编码,而且很难同时访问同一个文档中的多处不同数据
3.JDOM方式解析XML
简化与XML的交互并且比使用DOM实现更快,仅使用具体类而不使用接口因此简化了API,并且易于使用
4.DOM4j方式解析XML
JDOM的一种智能分支,功能较强大,建议熟练使用
下面给出例子:
bean类:Book.java
1.DOM方式解析XML
2.SAX方式解析XML
需要自定义DefaultHandler处理器3.JDOM方式解析XML
4.DOM4j方式解析XML
Dom解析是将xml文件全部载入到内存,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,与平台无关,java提供的一种基础的解析XML文件的API,理解较简单,但是由于整个文档都需要载入内存,不适用于文档较大时。
2.SAX方式解析XML
基于事件驱动,逐条解析,适用于只处理xml数据,不易编码,而且很难同时访问同一个文档中的多处不同数据
3.JDOM方式解析XML
简化与XML的交互并且比使用DOM实现更快,仅使用具体类而不使用接口因此简化了API,并且易于使用
4.DOM4j方式解析XML
JDOM的一种智能分支,功能较强大,建议熟练使用
下面给出例子:
books.xml
[html] view plain copy
- <?xml version="1.0" encoding="UTF-8"?>
- <bookstore>
- <book id="1">
- <name>冰与火之歌</name>
- <author>乔治马丁</author>
- <year>2014</year>
- <price>89</price>
- </book>
- <book id="2">
- <name>安徒生童话</name>
- <author>安徒生</author>
- <year>2004</year>
- <price>77</price>
- </book>
- <book id="3">
- <name>think think think</name>
- <author>aaa</author>
- <year>1997</year>
- <price>100</price>
- </book>
- </bookstore>
[java] view plain copy
- public class Book {
- /**
- * @author lune
- */
- private int id;
- private String name;
- private String author;
- private int year;
- private double price;
- /**
- * @return the id
- */
- public int getId() {
- return id;
- }
- /**
- * @param id the id to set
- */
- public void setId(int id) {
- this.id = id;
- }
- /**
- * @return the name
- */
- public String getName() {
- return name;
- }
- /**
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
- /**
- * @return the author
- */
- public String getAuthor() {
- return author;
- }
- /**
- * @param author the author to set
- */
- public void setAuthor(String author) {
- this.author = author;
- }
- /**
- * @return the year
- */
- public int getYear() {
- return year;
- }
- /**
- * @param year the year to set
- */
- public void setYear(int year) {
- this.year = year;
- }
- /**
- * @return the price
- */
- public double getPrice() {
- return price;
- }
- /**
- * @param price the price to set
- */
- public void setPrice(double price) {
- this.price = price;
- }
- @Override
- public String toString() {
- return "Book [id=" + id + ", name=" + name + ", author=" + author + ", year=" + year + ", price=" + price + "]";
- }
- }
1.DOM方式解析XML
[java] view plain copy
- import java.util.ArrayList;
- import java.util.List;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import org.w3c.dom.Document;
- import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.NodeList;
- import com.lune.bean.Book;
- /**
- * 用DOM方式读取xml文件
- * @author lune
- */
- public class ReadxmlByDom {
- private static DocumentBuilderFactory dbFactory = null;
- private static DocumentBuilder db = null;
- private static Document document = null;
- private static List<Book> books = null;
- static{
- try {
- dbFactory = DocumentBuilderFactory.newInstance();
- db = dbFactory.newDocumentBuilder();
- } catch (ParserConfigurationException e) {
- e.printStackTrace();
- }
- }
- public static List<Book> getBooks(String fileName) throws Exception{
- //将给定 URI 的内容解析为一个 XML 文档,并返回Document对象
- document = db.parse(fileName);
- //按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList
- NodeList bookList = document.getElementsByTagName("book");
- books = new ArrayList<Book>();
- //遍历books
- for(int i=0;i<bookList.getLength();i++){
- Book book = new Book();
- //获取第i个book结点
- org.w3c.dom.Node node = bookList.item(i);
- //获取第i个book的所有属性
- NamedNodeMap namedNodeMap = node.getAttributes();
- //获取已知名为id的属性值
- String id = namedNodeMap.getNamedItem("id").getTextContent();//System.out.println(id);
- book.setId(Integer.parseInt(id));
- //获取book结点的子节点,包含了Test类型的换行
- NodeList cList = node.getChildNodes();//System.out.println(cList.getLength());9
- //将一个book里面的属性加入数组
- ArrayList<String> contents = new ArrayList<>();
- for(int j=1;j<cList.getLength();j+=2){
- org.w3c.dom.Node cNode = cList.item(j);
- String content = cNode.getFirstChild().getTextContent();
- contents.add(content);
- //System.out.println(contents);
- }
- book.setName(contents.get(0));
- book.setAuthor(contents.get(1));
- book.setYear(Integer.parseInt(contents.get(2)));
- book.setPrice(Double.parseDouble(contents.get(3)));
- books.add(book);
- }
- return books;
- }
- public static void main(String args[]){
- String fileName = "src/res/books.xml";
- try {
- List<Book> list = ReadxmlByDom.getBooks(fileName);
- for(Book book :list){
- System.out.println(book);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
2.SAX方式解析XML
需要自定义DefaultHandler处理器
[java] view plain copy
- import java.util.ArrayList;
- import java.util.List;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- import com.lune.bean.Book;
- /**
- * 用SAX解析xml文件时需要的handler
- * @author lune
- */
- public class SAXParseHandler extends DefaultHandler {
- private List<Book> list; //存放解析到的book数组
- private Book book; //存放当前解析的book
- private String content = null; //存放当前节点值
- /**
- * 开始解析xml文档时调用此方法
- */
- @Override
- public void startDocument() throws SAXException {
- super.startDocument();
- System.out.println("开始解析xml文件");
- list = new ArrayList<Book>();
- }
- /**
- * 文档解析完成后调用此方法
- */
- @Override
- public void endDocument() throws SAXException {
- super.endDocument();
- System.out.println("xml文件解析完毕");
- }
- /**
- * 开始解析节点时调用此方法
- */
- @Override
- public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
- super.startElement(uri, localName, qName, attributes);
- //当节点名为book时,获取book的属性id
- if(qName.equals("book")){
- book = new Book();
- String id = attributes.getValue("id");//System.out.println("id值为"+id);
- book.setId(Integer.parseInt(id));
- }
- }
- /**
- *节点解析完毕时调用此方法
- *
- *@param qName 节点名
- */
- @Override
- public void endElement(String uri, String localName, String qName) throws SAXException {
- super.endElement(uri, localName, qName);
- if(qName.equals("name")){
- book.setName(content);
- //System.out.println("书名"+content);
- }else if(qName.equals("author")){
- book.setAuthor(content);
- // System.out.println("作者"+content);
- }else if(qName.equals("year")){
- book.setYear(Integer.parseInt(content));
- // System.out.println("年份"+content);
- }else if(qName.equals("price")){
- book.setPrice(Double.parseDouble(content));
- // System.out.println("价格"+content);
- }else if(qName.equals("book")){ //当结束当前book解析时,将该book添加到数组后置为空,方便下一次book赋值
- list.add(book);
- book = null;
- }
- }
- /**
- * 此方法用来获取节点的值
- */
- @Override
- public void characters(char[] ch, int start, int length) throws SAXException {
- super.characters(ch, start, length);
- content = new String(ch, start, length);
- //收集不为空白的节点值
- // if(!content.trim().equals("")){
- // System.out.println("节点值为:"+content);
- // }
- }
- public List<Book> getBooks(){
- return list;
- }
- }
[java] view plain copy
- import java.io.IOException;
- import java.util.List;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.ParserFactory;
- import com.lune.bean.Book;
- import com.lune.handler.SAXParseHandler;
- /**
- * 用SAX方式读取xml文件
- * @author lune
- */
- public class ReadXmlBySAX {
- private static List<Book> books = null;
- private SAXParserFactory sParserFactory = null;
- private SAXParser parser = null;
- public List<Book> getBooks(String fileName) throws Exception{
- SAXParserFactory sParserFactory = SAXParserFactory.newInstance();
- SAXParser parser = sParserFactory.newSAXParser();
- SAXParseHandler handler = new SAXParseHandler();
- parser.parse(fileName, handler);
- return handler.getBooks();
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- try {
- books = new ReadXmlBySAX().getBooks("src/res/books.xml");
- for(Book book:books){
- System.out.println(book);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
[java] view plain copy
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import org.jdom2.JDOMException;
- import org.jdom2.input.SAXBuilder;
- import com.lune.bean.Book;
- import org.jdom2.*;
- /**
- * 用JDOM方式读取xml文件
- * @author lune
- */
- public class ReadXMLByJDom {
- private List<Book> books = null;
- private Book book = null;
- public List<Book> getBooks(String fileName){
- SAXBuilder saxBuilder = new SAXBuilder();
- try {
- Document document = saxBuilder.build(new FileInputStream(fileName));
- //获取根节点bookstore
- Element rootElement = document.getRootElement();
- //获取根节点的子节点,返回子节点的数组
- List<Element> bookList = rootElement.getChildren();
- books = new ArrayList<Book>();
- for(Element bookElement : bookList){
- book = new Book();
- //获取bookElement的属性
- List<Attribute> bookAttributes = bookElement.getAttributes();
- for(Attribute attribute : bookAttributes){
- if(attribute.getName().equals("id")){
- String id = attribute.getValue(); //System.out.println(id);
- book.setId(Integer.parseInt(id));
- }
- }
- //获取bookElement的子节点
- List<Element> children = bookElement.getChildren();
- for(Element child : children){
- if(child.getName().equals("name")){
- String name = child.getValue();//System.out.println(name);
- book.setName(name);
- }else if(child.getName().equals("author")){
- String author = child.getValue();
- book.setAuthor(author);//System.out.println(author);
- }else if(child.getName().equals("year")){
- String year = child.getValue();
- book.setYear(Integer.parseInt(year));
- }else if(child.getName().equals("price")){
- String price = child.getValue();
- book.setPrice(Double.parseDouble(price));
- }
- }
- books.add(book);
- book = null;
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (JDOMException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return books;
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String fileName = "src/res/books.xml";
- List<Book> books= new ReadXMLByJDom().getBooks(fileName);
- for(Book book : books){
- System.out.println(book);
- }
- }
- }
4.DOM4j方式解析XML
[java] view plain copy
- import java.io.File;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import org.dom4j.Attribute;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- import com.lune.bean.Book;
- /**
- * 用DOM4J方法读取xml文件
- * @author lune
- */
- public class ReadXMLByDom4j {
- private List<Book> bookList = null;
- private Book book = null;
- public List<Book> getBooks(File file){
- SAXReader reader = new SAXReader();
- try {
- Document document = reader.read(file);
- Element bookstore = document.getRootElement();
- Iterator storeit = bookstore.elementIterator();
- bookList = new ArrayList<Book>();
- while(storeit.hasNext()){
- book = new Book();
- Element bookElement = (Element) storeit.next();
- //遍历bookElement的属性
- List<Attribute> attributes = bookElement.attributes();
- for(Attribute attribute : attributes){
- if(attribute.getName().equals("id")){
- String id = attribute.getValue();//System.out.println(id);
- book.setId(Integer.parseInt(id));
- }
- }
- Iterator bookit = bookElement.elementIterator();
- while(bookit.hasNext()){
- Element child = (Element) bookit.next();
- String nodeName = child.getName();
- if(nodeName.equals("name")){
- //System.out.println(child.getStringValue());
- String name = child.getStringValue();
- book.setName(name);
- }else if(nodeName.equals("author")){
- String author = child.getStringValue();
- book.setAuthor(author);
- }else if(nodeName.equals("year")){
- String year = child.getStringValue();
- book.setYear(Integer.parseInt(year));
- }else if(nodeName.equals("price")){
- String price = child.getStringValue();
- book.setPrice(Double.parseDouble(price));
- }
- }
- bookList.add(book);
- book = null;
- }
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- return bookList;
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- File file = new File("src/res/books.xml");
- List<Book> bookList = new ReadXMLByDom4j().getBooks(file);
- for(Book book : bookList){
- System.out.println(book);
- }
- }
- }
0 0
- java中四种方式解析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文件四种方式
- java解析xml文件四种方式
- JAVA SAX 方式解析XML文件
- java解析xml文件四种方式
- Java解析xml文件四种方式
- java解析xml文件四种方式
- 多线程编程 使用 synchronized来同步静态方法 非静态方法 代码块
- spring整合redis
- Android开发-高级网络组件(1)使用Volley登陆-AndroidStudio
- ueditor编辑器使用查阅资料
- Spark DecisionTreeModel print
- java中四种方式解析XML文件
- android:windowIsTranslucent
- 用cublas实现行优先矩阵乘法和列优先矩阵乘法
- Elasticsearch系列07:数据迁移与备份
- poj2892 Tunnel Warfare(数状数组+二分)
- 图解HTTPS
- js监听浏览器关闭事件 onbeforeunload和Onunload不生效 使用onpadehide可以监听到浏览器关闭事件
- Java解析复杂嵌套JSON数据格式代码,提取出来所有的key和value。亲测代码可用
- ajax请求返回了两个重复json对象