Aqq的成神之路

我是菜鸟我怕谁

java 解析xml文件的几种方式
1.DOM方式解析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
  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2. <bookstore>  
  3.     <book id=“1”>  
  4.         <name>冰与火之歌</name>  
  5.         <author>乔治马丁</author>  
  6.         <year>2014</year>  
  7.         <price>89</price>  
  8.     </book>  
  9.     <book id=“2”>  
  10.         <name>安徒生童话</name>  
  11.         <author>安徒生</author>  
  12.         <year>2004</year>  
  13.         <price>77</price>  
  14.     </book>  
  15.     <book id=“3”>  
  16.         <name>think think think</name>  
  17.         <author>aaa</author>  
  18.         <year>1997</year>  
  19.         <price>100</price>  
  20.     </book>  
  21. </bookstore>  
[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <bookstore>  
  3.     <book id="1">  
  4.         <name>冰与火之歌</name>  
  5.         <author>乔治马丁</author>  
  6.         <year>2014</year>  
  7.         <price>89</price>  
  8.     </book>  
  9.     <book id="2">  
  10.         <name>安徒生童话</name>  
  11.         <author>安徒生</author>  
  12.         <year>2004</year>  
  13.         <price>77</price>  
  14.     </book>  
  15.     <book id="3">  
  16.         <name>think think think</name>  
  17.         <author>aaa</author>  
  18.         <year>1997</year>  
  19.         <price>100</price>  
  20.     </book>  
  21. </bookstore>  
bean类:Book.java

[java] view plain copy
  1. public class Book {  
  2.       
  3.     /** 
  4.      * @author lune 
  5.      */  
  6.       
  7.     private int id;  
  8.     private String name;  
  9.     private String author;  
  10.     private int year;  
  11.     private double price;  
  12.       
  13.     /** 
  14.      * @return the id 
  15.      */  
  16.     public int getId() {  
  17.         return id;  
  18.     }  
  19.     /** 
  20.      * @param id the id to set 
  21.      */  
  22.     public void setId(int id) {  
  23.         this.id = id;  
  24.     }  
  25.     /** 
  26.      * @return the name 
  27.      */  
  28.     public String getName() {  
  29.         return name;  
  30.     }  
  31.     /** 
  32.      * @param name the name to set 
  33.      */  
  34.     public void setName(String name) {  
  35.         this.name = name;  
  36.     }  
  37.     /** 
  38.      * @return the author 
  39.      */  
  40.     public String getAuthor() {  
  41.         return author;  
  42.     }  
  43.     /** 
  44.      * @param author the author to set 
  45.      */  
  46.     public void setAuthor(String author) {  
  47.         this.author = author;  
  48.     }  
  49.     /** 
  50.      * @return the year 
  51.      */  
  52.     public int getYear() {  
  53.         return year;  
  54.     }  
  55.     /** 
  56.      * @param year the year to set 
  57.      */  
  58.     public void setYear(int year) {  
  59.         this.year = year;  
  60.     }  
  61.     /** 
  62.      * @return the price 
  63.      */  
  64.     public double getPrice() {  
  65.         return price;  
  66.     }  
  67.     /** 
  68.      * @param price the price to set 
  69.      */  
  70.     public void setPrice(double price) {  
  71.         this.price = price;  
  72.     }  
  73.       
  74.     @Override  
  75.     public String toString() {  
  76.         return “Book [id=” + id + “, name=” + name + “, author=” + author + “, year=” + year + “, price=” + price + “]”;  
  77.     }  
  78.           
  79. }  
[java] view plain copy
  1. public class Book {  
  2.   
  3.     /** 
  4.      * @author lune 
  5.      */  
  6.   
  7.     private int id;  
  8.     private String name;  
  9.     private String author;  
  10.     private int year;  
  11.     private double price;  
  12.   
  13.     /** 
  14.      * @return the id 
  15.      */  
  16.     public int getId() {  
  17.         return id;  
  18.     }  
  19.     /** 
  20.      * @param id the id to set 
  21.      */  
  22.     public void setId(int id) {  
  23.         this.id = id;  
  24.     }  
  25.     /** 
  26.      * @return the name 
  27.      */  
  28.     public String getName() {  
  29.         return name;  
  30.     }  
  31.     /** 
  32.      * @param name the name to set 
  33.      */  
  34.     public void setName(String name) {  
  35.         this.name = name;  
  36.     }  
  37.     /** 
  38.      * @return the author 
  39.      */  
  40.     public String getAuthor() {  
  41.         return author;  
  42.     }  
  43.     /** 
  44.      * @param author the author to set 
  45.      */  
  46.     public void setAuthor(String author) {  
  47.         this.author = author;  
  48.     }  
  49.     /** 
  50.      * @return the year 
  51.      */  
  52.     public int getYear() {  
  53.         return year;  
  54.     }  
  55.     /** 
  56.      * @param year the year to set 
  57.      */  
  58.     public void setYear(int year) {  
  59.         this.year = year;  
  60.     }  
  61.     /** 
  62.      * @return the price 
  63.      */  
  64.     public double getPrice() {  
  65.         return price;  
  66.     }  
  67.     /** 
  68.      * @param price the price to set 
  69.      */  
  70.     public void setPrice(double price) {  
  71.         this.price = price;  
  72.     }  
  73.   
  74.     @Override  
  75.     public String toString() {  
  76.         return "Book [id=" + id + ", name=" + name + ", author=" + author + ", year=" + year + ", price=" + price + "]";  
  77.     }  
  78.   
  79. }  

1.DOM方式解析XML

[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import javax.xml.parsers.DocumentBuilder;  
  5. import javax.xml.parsers.DocumentBuilderFactory;  
  6. import javax.xml.parsers.ParserConfigurationException;  
  7.   
  8. import org.w3c.dom.Document;  
  9. import org.w3c.dom.NamedNodeMap;  
  10. import org.w3c.dom.NodeList;  
  11.   
  12. import com.lune.bean.Book;  
  13.   
  14. /** 
  15.  * 用DOM方式读取xml文件 
  16.  * @author lune 
  17.  */  
  18. public class ReadxmlByDom {  
  19.     private static DocumentBuilderFactory dbFactory = null;  
  20.     private static DocumentBuilder db = null;  
  21.     private static Document document = null;  
  22.     private static List<Book> books = null;  
  23.     static{  
  24.         try {  
  25.             dbFactory = DocumentBuilderFactory.newInstance();  
  26.             db = dbFactory.newDocumentBuilder();  
  27.         } catch (ParserConfigurationException e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.     }  
  31.       
  32.     public static List<Book> getBooks(String fileName) throws Exception{  
  33.         //将给定 URI 的内容解析为一个 XML 文档,并返回Document对象  
  34.         document = db.parse(fileName);  
  35.         //按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList  
  36.         NodeList bookList = document.getElementsByTagName(”book”);  
  37.         books = new ArrayList<Book>();  
  38.         //遍历books  
  39.         for(int i=0;i<bookList.getLength();i++){  
  40.             Book book = new Book();  
  41.             //获取第i个book结点  
  42.             org.w3c.dom.Node node = bookList.item(i);  
  43.             //获取第i个book的所有属性  
  44.             NamedNodeMap namedNodeMap = node.getAttributes();  
  45.             //获取已知名为id的属性值  
  46.             String id = namedNodeMap.getNamedItem(”id”).getTextContent();//System.out.println(id);  
  47.             book.setId(Integer.parseInt(id));  
  48.               
  49.             //获取book结点的子节点,包含了Test类型的换行  
  50.             NodeList cList = node.getChildNodes();//System.out.println(cList.getLength());9  
  51.               
  52.             //将一个book里面的属性加入数组  
  53.             ArrayList<String> contents = new ArrayList<>();  
  54.             for(int j=1;j<cList.getLength();j+=2){  
  55.                   
  56.                 org.w3c.dom.Node cNode = cList.item(j);  
  57.                 String content = cNode.getFirstChild().getTextContent();  
  58.                 contents.add(content);  
  59.                 //System.out.println(contents);  
  60.             }  
  61.               
  62.             book.setName(contents.get(0));  
  63.             book.setAuthor(contents.get(1));  
  64.             book.setYear(Integer.parseInt(contents.get(2)));  
  65.             book.setPrice(Double.parseDouble(contents.get(3)));  
  66.             books.add(book);  
  67.         }  
  68.           
  69.         return books;  
  70.           
  71.     }  
  72.       
  73.     public static void main(String args[]){  
  74.         String fileName = ”src/res/books.xml”;  
  75.         try {  
  76.             List<Book> list = ReadxmlByDom.getBooks(fileName);  
  77.             for(Book book :list){  
  78.                 System.out.println(book);  
  79.             }  
  80.         } catch (Exception e) {  
  81.             // TODO Auto-generated catch block  
  82.             e.printStackTrace();  
  83.         }  
  84.     }  
  85.           
  86. }  
[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import javax.xml.parsers.DocumentBuilder;  
  5. import javax.xml.parsers.DocumentBuilderFactory;  
  6. import javax.xml.parsers.ParserConfigurationException;  
  7.   
  8. import org.w3c.dom.Document;  
  9. import org.w3c.dom.NamedNodeMap;  
  10. import org.w3c.dom.NodeList;  
  11.   
  12. import com.lune.bean.Book;  
  13.   
  14. /** 
  15.  * 用DOM方式读取xml文件 
  16.  * @author lune 
  17.  */  
  18. public class ReadxmlByDom {  
  19.     private static DocumentBuilderFactory dbFactory = null;  
  20.     private static DocumentBuilder db = null;  
  21.     private static Document document = null;  
  22.     private static List<Book> books = null;  
  23.     static{  
  24.         try {  
  25.             dbFactory = DocumentBuilderFactory.newInstance();  
  26.             db = dbFactory.newDocumentBuilder();  
  27.         } catch (ParserConfigurationException e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.     }  
  31.   
  32.     public static List<Book> getBooks(String fileName) throws Exception{  
  33.         //将给定 URI 的内容解析为一个 XML 文档,并返回Document对象  
  34.         document = db.parse(fileName);  
  35.         //按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList  
  36.         NodeList bookList = document.getElementsByTagName("book");  
  37.         books = new ArrayList<Book>();  
  38.         //遍历books  
  39.         for(int i=0;i<bookList.getLength();i++){  
  40.             Book book = new Book();  
  41.             //获取第i个book结点  
  42.             org.w3c.dom.Node node = bookList.item(i);  
  43.             //获取第i个book的所有属性  
  44.             NamedNodeMap namedNodeMap = node.getAttributes();  
  45.             //获取已知名为id的属性值  
  46.             String id = namedNodeMap.getNamedItem("id").getTextContent();//System.out.println(id);  
  47.             book.setId(Integer.parseInt(id));  
  48.   
  49.             //获取book结点的子节点,包含了Test类型的换行  
  50.             NodeList cList = node.getChildNodes();//System.out.println(cList.getLength());9  
  51.   
  52.             //将一个book里面的属性加入数组  
  53.             ArrayList<String> contents = new ArrayList<>();  
  54.             for(int j=1;j<cList.getLength();j+=2){  
  55.   
  56.                 org.w3c.dom.Node cNode = cList.item(j);  
  57.                 String content = cNode.getFirstChild().getTextContent();  
  58.                 contents.add(content);  
  59.                 //System.out.println(contents);  
  60.             }  
  61.   
  62.             book.setName(contents.get(0));  
  63.             book.setAuthor(contents.get(1));  
  64.             book.setYear(Integer.parseInt(contents.get(2)));  
  65.             book.setPrice(Double.parseDouble(contents.get(3)));  
  66.             books.add(book);  
  67.         }  
  68.   
  69.         return books;  
  70.   
  71.     }  
  72.   
  73.     public static void main(String args[]){  
  74.         String fileName = "src/res/books.xml";  
  75.         try {  
  76.             List<Book> list = ReadxmlByDom.getBooks(fileName);  
  77.             for(Book book :list){  
  78.                 System.out.println(book);  
  79.             }  
  80.         } catch (Exception e) {  
  81.             // TODO Auto-generated catch block  
  82.             e.printStackTrace();  
  83.         }  
  84.     }  
  85.   
  86. }  


2.SAX方式解析XML
需要自定义DefaultHandler处理器

[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import org.xml.sax.Attributes;  
  5. import org.xml.sax.SAXException;  
  6. import org.xml.sax.helpers.DefaultHandler;  
  7.   
  8. import com.lune.bean.Book;  
  9.   
  10. /** 
  11.  * 用SAX解析xml文件时需要的handler 
  12.  * @author lune 
  13.  */  
  14. public class SAXParseHandler extends DefaultHandler {  
  15.     private List<Book> list;         //存放解析到的book数组  
  16.     private Book book;               //存放当前解析的book  
  17.       
  18.     private String content = null;   //存放当前节点值  
  19.       
  20.     /** 
  21.      * 开始解析xml文档时调用此方法 
  22.      */  
  23.     @Override  
  24.     public void startDocument() throws SAXException {  
  25.           
  26.         super.startDocument();  
  27.         System.out.println(”开始解析xml文件”);  
  28.         list = new ArrayList<Book>();  
  29.     }  
  30.   
  31.   
  32.   
  33.     /**  
  34.      * 文档解析完成后调用此方法 
  35.      */  
  36.     @Override  
  37.     public void endDocument() throws SAXException {  
  38.           
  39.         super.endDocument();  
  40.         System.out.println(”xml文件解析完毕”);  
  41.     }  
  42.   
  43.   
  44.   
  45.     /** 
  46.      * 开始解析节点时调用此方法 
  47.      */  
  48.     @Override  
  49.     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {  
  50.           
  51.         super.startElement(uri, localName, qName, attributes);  
  52.           
  53.         //当节点名为book时,获取book的属性id  
  54.         if(qName.equals(“book”)){  
  55.             book = new Book();  
  56.             String id = attributes.getValue(”id”);//System.out.println(“id值为”+id);  
  57.             book.setId(Integer.parseInt(id));  
  58.         }  
  59.           
  60.     }  
  61.   
  62.   
  63.     /** 
  64.      *节点解析完毕时调用此方法 
  65.      * 
  66.      *@param qName 节点名 
  67.      */  
  68.     @Override  
  69.     public void endElement(String uri, String localName, String qName) throws SAXException {  
  70.           
  71.         super.endElement(uri, localName, qName);  
  72.         if(qName.equals(“name”)){  
  73.             book.setName(content);  
  74.             //System.out.println(“书名”+content);  
  75.         }else if(qName.equals(“author”)){  
  76.             book.setAuthor(content);  
  77.         //  System.out.println(“作者”+content);  
  78.         }else if(qName.equals(“year”)){  
  79.             book.setYear(Integer.parseInt(content));  
  80.         //  System.out.println(“年份”+content);  
  81.         }else if(qName.equals(“price”)){  
  82.             book.setPrice(Double.parseDouble(content));  
  83.         //  System.out.println(“价格”+content);  
  84.         }else if(qName.equals(“book”)){         //当结束当前book解析时,将该book添加到数组后置为空,方便下一次book赋值  
  85.             list.add(book);  
  86.             book = null;  
  87.         }     
  88.           
  89.     }  
  90.   
  91.   
  92.   
  93.     /**  
  94.      * 此方法用来获取节点的值 
  95.      */  
  96.     @Override  
  97.     public void characters(char[] ch, int start, int length) throws SAXException {  
  98.           
  99.         super.characters(ch, start, length);  
  100.           
  101.         content = new String(ch, start, length);  
  102.         //收集不为空白的节点值  
  103. //      if(!content.trim().equals(“”)){  
  104. //          System.out.println(“节点值为:”+content);  
  105. //      }  
  106.           
  107.     }  
  108.   
  109.     public List<Book> getBooks(){  
  110.         return list;  
  111.     }  
  112.       
  113. }  
[java] view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import org.xml.sax.Attributes;  
  5. import org.xml.sax.SAXException;  
  6. import org.xml.sax.helpers.DefaultHandler;  
  7.   
  8. import com.lune.bean.Book;  
  9.   
  10. /** 
  11.  * 用SAX解析xml文件时需要的handler 
  12.  * @author lune 
  13.  */  
  14. public class SAXParseHandler extends DefaultHandler {  
  15.     private List<Book> list;         //存放解析到的book数组  
  16.     private Book book;               //存放当前解析的book  
  17.   
  18.     private String content = null;   //存放当前节点值  
  19.   
  20.     /** 
  21.      * 开始解析xml文档时调用此方法 
  22.      */  
  23.     @Override  
  24.     public void startDocument() throws SAXException {  
  25.   
  26.         super.startDocument();  
  27.         System.out.println("开始解析xml文件");  
  28.         list = new ArrayList<Book>();  
  29.     }  
  30.   
  31.   
  32.   
  33.     /**  
  34.      * 文档解析完成后调用此方法 
  35.      */  
  36.     @Override  
  37.     public void endDocument() throws SAXException {  
  38.   
  39.         super.endDocument();  
  40.         System.out.println("xml文件解析完毕");  
  41.     }  
  42.   
  43.   
  44.   
  45.     /** 
  46.      * 开始解析节点时调用此方法 
  47.      */  
  48.     @Override  
  49.     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {  
  50.   
  51.         super.startElement(uri, localName, qName, attributes);  
  52.   
  53.         //当节点名为book时,获取book的属性id  
  54.         if(qName.equals("book")){  
  55.             book = new Book();  
  56.             String id = attributes.getValue("id");//System.out.println("id值为"+id);  
  57.             book.setId(Integer.parseInt(id));  
  58.         }  
  59.   
  60.     }  
  61.   
  62.   
  63.     /** 
  64.      *节点解析完毕时调用此方法 
  65.      * 
  66.      *@param qName 节点名 
  67.      */  
  68.     @Override  
  69.     public void endElement(String uri, String localName, String qName) throws SAXException {  
  70.   
  71.         super.endElement(uri, localName, qName);  
  72.         if(qName.equals("name")){  
  73.             book.setName(content);  
  74.             //System.out.println("书名"+content);  
  75.         }else if(qName.equals("author")){  
  76.             book.setAuthor(content);  
  77.         //  System.out.println("作者"+content);  
  78.         }else if(qName.equals("year")){  
  79.             book.setYear(Integer.parseInt(content));  
  80.         //  System.out.println("年份"+content);  
  81.         }else if(qName.equals("price")){  
  82.             book.setPrice(Double.parseDouble(content));  
  83.         //  System.out.println("价格"+content);  
  84.         }else if(qName.equals("book")){         //当结束当前book解析时,将该book添加到数组后置为空,方便下一次book赋值  
  85.             list.add(book);  
  86.             book = null;  
  87.         }     
  88.   
  89.     }  
  90.   
  91.   
  92.   
  93.     /**  
  94.      * 此方法用来获取节点的值 
  95.      */  
  96.     @Override  
  97.     public void characters(char[] ch, int start, int length) throws SAXException {  
  98.   
  99.         super.characters(ch, start, length);  
  100.   
  101.         content = new String(ch, start, length);  
  102.         //收集不为空白的节点值  
  103. //      if(!content.trim().equals("")){  
  104. //          System.out.println("节点值为:"+content);  
  105. //      }  
  106.   
  107.     }  
  108.   
  109.     public List<Book> getBooks(){  
  110.         return list;  
  111.     }  
  112.   
  113. }  


[java] view plain copy
  1. import java.io.IOException;  
  2. import java.util.List;  
  3.   
  4. import javax.xml.parsers.ParserConfigurationException;  
  5. import javax.xml.parsers.SAXParser;  
  6. import javax.xml.parsers.SAXParserFactory;  
  7.   
  8. import org.xml.sax.SAXException;  
  9. import org.xml.sax.helpers.ParserFactory;  
  10.   
  11. import com.lune.bean.Book;  
  12. import com.lune.handler.SAXParseHandler;  
  13.   
  14. /** 
  15.  * 用SAX方式读取xml文件 
  16.  * @author lune 
  17.  */  
  18. public class ReadXmlBySAX {  
  19.   
  20.     private static List<Book> books = null;  
  21.       
  22.     private  SAXParserFactory sParserFactory = null;  
  23.     private  SAXParser parser = null;  
  24.       
  25.       
  26.     public List<Book> getBooks(String fileName) throws Exception{  
  27.         SAXParserFactory sParserFactory = SAXParserFactory.newInstance();  
  28.         SAXParser parser = sParserFactory.newSAXParser();  
  29.           
  30.         SAXParseHandler handler = new SAXParseHandler();  
  31.         parser.parse(fileName, handler);  
  32.           
  33.         return handler.getBooks();  
  34.           
  35.     }  
  36.     /** 
  37.      * @param args 
  38.      */  
  39.     public static void main(String[] args) {  
  40.         try {  
  41.             books = new ReadXmlBySAX().getBooks(“src/res/books.xml”);  
  42.             for(Book book:books){  
  43.                 System.out.println(book);  
  44.             }  
  45.               
  46.         } catch (Exception e) {  
  47.             e.printStackTrace();  
  48.         }  
  49.   
  50.     }  
  51.   
  52. }  
[java] view plain copy
  1. import java.io.IOException;  
  2. import java.util.List;  
  3.   
  4. import javax.xml.parsers.ParserConfigurationException;  
  5. import javax.xml.parsers.SAXParser;  
  6. import javax.xml.parsers.SAXParserFactory;  
  7.   
  8. import org.xml.sax.SAXException;  
  9. import org.xml.sax.helpers.ParserFactory;  
  10.   
  11. import com.lune.bean.Book;  
  12. import com.lune.handler.SAXParseHandler;  
  13.   
  14. /** 
  15.  * 用SAX方式读取xml文件 
  16.  * @author lune 
  17.  */  
  18. public class ReadXmlBySAX {  
  19.   
  20.     private static List<Book> books = null;  
  21.   
  22.     private  SAXParserFactory sParserFactory = null;  
  23.     private  SAXParser parser = null;  
  24.   
  25.   
  26.     public List<Book> getBooks(String fileName) throws Exception{  
  27.         SAXParserFactory sParserFactory = SAXParserFactory.newInstance();  
  28.         SAXParser parser = sParserFactory.newSAXParser();  
  29.   
  30.         SAXParseHandler handler = new SAXParseHandler();  
  31.         parser.parse(fileName, handler);  
  32.   
  33.         return handler.getBooks();  
  34.   
  35.     }  
  36.     /** 
  37.      * @param args 
  38.      */  
  39.     public static void main(String[] args) {  
  40.         try {  
  41.             books = new ReadXmlBySAX().getBooks("src/res/books.xml");  
  42.             for(Book book:books){  
  43.                 System.out.println(book);  
  44.             }  
  45.   
  46.         } catch (Exception e) {  
  47.             e.printStackTrace();  
  48.         }  
  49.   
  50.     }  
  51.   
  52. }  
3.JDOM方式解析XML

[java] view plain copy
  1. import java.io.FileInputStream;  
  2. import java.io.FileNotFoundException;  
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import org.jdom2.JDOMException;  
  8. import org.jdom2.input.SAXBuilder;  
  9.   
  10. import com.lune.bean.Book;  
  11.   
  12. import org.jdom2.*;  
  13.   
  14. /** 
  15.  * 用JDOM方式读取xml文件 
  16.  * @author lune 
  17.  */  
  18. public class ReadXMLByJDom {  
  19.       
  20.     private List<Book> books = null;  
  21.     private Book book = null;  
  22.       
  23.     public List<Book> getBooks(String fileName){  
  24.         SAXBuilder saxBuilder = new SAXBuilder();  
  25.         try {  
  26.             Document document = saxBuilder.build(new FileInputStream(fileName));  
  27.             //获取根节点bookstore  
  28.             Element rootElement = document.getRootElement();  
  29.             //获取根节点的子节点,返回子节点的数组  
  30.             List<Element> bookList = rootElement.getChildren();  
  31.             books = new ArrayList<Book>();  
  32.             for(Element bookElement : bookList){  
  33.                 book = new Book();  
  34.                 //获取bookElement的属性  
  35.                 List<Attribute> bookAttributes = bookElement.getAttributes();  
  36.                 for(Attribute attribute : bookAttributes){  
  37.                     if(attribute.getName().equals(“id”)){  
  38.                         String id = attribute.getValue(); //System.out.println(id);  
  39.                         book.setId(Integer.parseInt(id));  
  40.                     }  
  41.                 }  
  42.                 //获取bookElement的子节点  
  43.                 List<Element> children = bookElement.getChildren();  
  44.                 for(Element child : children){  
  45.                     if(child.getName().equals(“name”)){  
  46.                         String name = child.getValue();//System.out.println(name);  
  47.                         book.setName(name);  
  48.                     }else if(child.getName().equals(“author”)){  
  49.                         String author = child.getValue();  
  50.                         book.setAuthor(author);//System.out.println(author);  
  51.                     }else if(child.getName().equals(“year”)){  
  52.                         String year = child.getValue();  
  53.                         book.setYear(Integer.parseInt(year));  
  54.                     }else if(child.getName().equals(“price”)){  
  55.                         String price = child.getValue();  
  56.                         book.setPrice(Double.parseDouble(price));  
  57.                     }  
  58.                       
  59.                 }  
  60.                   
  61.                 books.add(book);  
  62.                 book = null;  
  63.                   
  64.             }  
  65.               
  66.         } catch (FileNotFoundException e) {  
  67.               
  68.             e.printStackTrace();  
  69.         } catch (JDOMException e) {  
  70.               
  71.             e.printStackTrace();  
  72.         } catch (IOException e) {  
  73.               
  74.             e.printStackTrace();  
  75.         }  
  76.           
  77.         return books;  
  78.           
  79.     }  
  80.   
  81.       
  82.     public static void main(String[] args) {  
  83.         // TODO Auto-generated method stub  
  84.         String fileName = ”src/res/books.xml”;  
  85.         List<Book> books= new ReadXMLByJDom().getBooks(fileName);  
  86.         for(Book book : books){  
  87.             System.out.println(book);  
  88.         }  
  89.     }  
  90.   
  91. }  
[java] view plain copy
  1. import java.io.FileInputStream;  
  2. import java.io.FileNotFoundException;  
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import org.jdom2.JDOMException;  
  8. import org.jdom2.input.SAXBuilder;  
  9.   
  10. import com.lune.bean.Book;  
  11.   
  12. import org.jdom2.*;  
  13.   
  14. /** 
  15.  * 用JDOM方式读取xml文件 
  16.  * @author lune 
  17.  */  
  18. public class ReadXMLByJDom {  
  19.   
  20.     private List<Book> books = null;  
  21.     private Book book = null;  
  22.   
  23.     public List<Book> getBooks(String fileName){  
  24.         SAXBuilder saxBuilder = new SAXBuilder();  
  25.         try {  
  26.             Document document = saxBuilder.build(new FileInputStream(fileName));  
  27.             //获取根节点bookstore  
  28.             Element rootElement = document.getRootElement();  
  29.             //获取根节点的子节点,返回子节点的数组  
  30.             List<Element> bookList = rootElement.getChildren();  
  31.             books = new ArrayList<Book>();  
  32.             for(Element bookElement : bookList){  
  33.                 book = new Book();  
  34.                 //获取bookElement的属性  
  35.                 List<Attribute> bookAttributes = bookElement.getAttributes();  
  36.                 for(Attribute attribute : bookAttributes){  
  37.                     if(attribute.getName().equals("id")){  
  38.                         String id = attribute.getValue(); //System.out.println(id);  
  39.                         book.setId(Integer.parseInt(id));  
  40.                     }  
  41.                 }  
  42.                 //获取bookElement的子节点  
  43.                 List<Element> children = bookElement.getChildren();  
  44.                 for(Element child : children){  
  45.                     if(child.getName().equals("name")){  
  46.                         String name = child.getValue();//System.out.println(name);  
  47.                         book.setName(name);  
  48.                     }else if(child.getName().equals("author")){  
  49.                         String author = child.getValue();  
  50.                         book.setAuthor(author);//System.out.println(author);  
  51.                     }else if(child.getName().equals("year")){  
  52.                         String year = child.getValue();  
  53.                         book.setYear(Integer.parseInt(year));  
  54.                     }else if(child.getName().equals("price")){  
  55.                         String price = child.getValue();  
  56.                         book.setPrice(Double.parseDouble(price));  
  57.                     }  
  58.   
  59.                 }  
  60.   
  61.                 books.add(book);  
  62.                 book = null;  
  63.   
  64.             }  
  65.   
  66.         } catch (FileNotFoundException e) {  
  67.   
  68.             e.printStackTrace();  
  69.         } catch (JDOMException e) {  
  70.   
  71.             e.printStackTrace();  
  72.         } catch (IOException e) {  
  73.   
  74.             e.printStackTrace();  
  75.         }  
  76.   
  77.         return books;  
  78.   
  79.     }  
  80.   
  81.   
  82.     public static void main(String[] args) {  
  83.         // TODO Auto-generated method stub  
  84.         String fileName = "src/res/books.xml";  
  85.         List<Book> books= new ReadXMLByJDom().getBooks(fileName);  
  86.         for(Book book : books){  
  87.             System.out.println(book);  
  88.         }  
  89.     }  
  90.   
  91. }  

4.DOM4j方式解析XML

[java] view plain copy
  1. import java.io.File;  
  2. import java.util.ArrayList;  
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5.   
  6. import org.dom4j.Attribute;  
  7. import org.dom4j.Document;  
  8. import org.dom4j.DocumentException;  
  9. import org.dom4j.Element;  
  10. import org.dom4j.io.SAXReader;  
  11.   
  12. import com.lune.bean.Book;  
  13.   
  14. /** 
  15.  * 用DOM4J方法读取xml文件 
  16.  * @author lune 
  17.  */  
  18. public class ReadXMLByDom4j {  
  19.       
  20.     private List<Book> bookList = null;  
  21.     private Book book = null;  
  22.       
  23.     public List<Book> getBooks(File file){  
  24.           
  25.         SAXReader reader = new SAXReader();  
  26.         try {  
  27.             Document document = reader.read(file);  
  28.             Element bookstore = document.getRootElement();  
  29.             Iterator storeit = bookstore.elementIterator();  
  30.               
  31.             bookList = new ArrayList<Book>();  
  32.             while(storeit.hasNext()){  
  33.                   
  34.                 book = new Book();  
  35.                 Element bookElement = (Element) storeit.next();  
  36.                 //遍历bookElement的属性  
  37.                 List<Attribute> attributes = bookElement.attributes();  
  38.                 for(Attribute attribute : attributes){  
  39.                     if(attribute.getName().equals(“id”)){  
  40.                         String id = attribute.getValue();//System.out.println(id);  
  41.                         book.setId(Integer.parseInt(id));  
  42.                     }  
  43.                 }  
  44.                   
  45.                 Iterator bookit = bookElement.elementIterator();  
  46.                 while(bookit.hasNext()){  
  47.                     Element child = (Element) bookit.next();  
  48.                     String nodeName = child.getName();  
  49.                     if(nodeName.equals(“name”)){  
  50.                         //System.out.println(child.getStringValue());  
  51.                         String name = child.getStringValue();  
  52.                         book.setName(name);  
  53.                     }else if(nodeName.equals(“author”)){  
  54.                         String author = child.getStringValue();  
  55.                         book.setAuthor(author);  
  56.                     }else if(nodeName.equals(“year”)){  
  57.                         String year = child.getStringValue();  
  58.                         book.setYear(Integer.parseInt(year));  
  59.                     }else if(nodeName.equals(“price”)){  
  60.                         String price = child.getStringValue();  
  61.                         book.setPrice(Double.parseDouble(price));  
  62.                     }  
  63.                 }  
  64.                 bookList.add(book);  
  65.                 book = null;  
  66.                   
  67.             }  
  68.         } catch (DocumentException e) {  
  69.           
  70.             e.printStackTrace();  
  71.         }  
  72.           
  73.           
  74.         return bookList;  
  75.           
  76.     }  
  77.       
  78.   
  79.     /** 
  80.      * @param args 
  81.      */  
  82.     public static void main(String[] args) {  
  83.         // TODO Auto-generated method stub  
  84.         File file = new File(“src/res/books.xml”);  
  85.         List<Book> bookList = new ReadXMLByDom4j().getBooks(file);  
  86.         for(Book book : bookList){  
  87.             System.out.println(book);  
  88.         }  
  89.     }  
  90.   
  91. }  
[java] view plain copy
  1. import java.io.File;  
  2. import java.util.ArrayList;  
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5.   
  6. import org.dom4j.Attribute;  
  7. import org.dom4j.Document;  
  8. import org.dom4j.DocumentException;  
  9. import org.dom4j.Element;  
  10. import org.dom4j.io.SAXReader;  
  11.   
  12. import com.lune.bean.Book;  
  13.   
  14. /** 
  15.  * 用DOM4J方法读取xml文件 
  16.  * @author lune 
  17.  */  
  18. public class ReadXMLByDom4j {  
  19.   
  20.     private List<Book> bookList = null;  
  21.     private Book book = null;  
  22.   
  23.     public List<Book> getBooks(File file){  
  24.   
  25.         SAXReader reader = new SAXReader();  
  26.         try {  
  27.             Document document = reader.read(file);  
  28.             Element bookstore = document.getRootElement();  
  29.             Iterator storeit = bookstore.elementIterator();  
  30.   
  31.             bookList = new ArrayList<Book>();  
  32.             while(storeit.hasNext()){  
  33.   
  34.                 book = new Book();  
  35.                 Element bookElement = (Element) storeit.next();  
  36.                 //遍历bookElement的属性  
  37.                 List<Attribute> attributes = bookElement.attributes();  
  38.                 for(Attribute attribute : attributes){  
  39.                     if(attribute.getName().equals("id")){  
  40.                         String id = attribute.getValue();//System.out.println(id);  
  41.                         book.setId(Integer.parseInt(id));  
  42.                     }  
  43.                 }  
  44.   
  45.                 Iterator bookit = bookElement.elementIterator();  
  46.                 while(bookit.hasNext()){  
  47.                     Element child = (Element) bookit.next();  
  48.                     String nodeName = child.getName();  
  49.                     if(nodeName.equals("name")){  
  50.                         //System.out.println(child.getStringValue());  
  51.                         String name = child.getStringValue();  
  52.                         book.setName(name);  
  53.                     }else if(nodeName.equals("author")){  
  54.                         String author = child.getStringValue();  
  55.                         book.setAuthor(author);  
  56.                     }else if(nodeName.equals("year")){  
  57.                         String year = child.getStringValue();  
  58.                         book.setYear(Integer.parseInt(year));  
  59.                     }else if(nodeName.equals("price")){  
  60.                         String price = child.getStringValue();  
  61.                         book.setPrice(Double.parseDouble(price));  
  62.                     }  
  63.                 }  
  64.                 bookList.add(book);  
  65.                 book = null;  
  66.   
  67.             }  
  68.         } catch (DocumentException e) {  
  69.   
  70.             e.printStackTrace();  
  71.         }  
  72.   
  73.   
  74.         return bookList;  
  75.   
  76.     }  
  77.   
  78.   
  79.     /** 
  80.      * @param args 
  81.      */  
  82.     public static void main(String[] args) {  
  83.         // TODO Auto-generated method stub  
  84.         File file = new File("src/res/books.xml");  
  85.         List<Book> bookList = new ReadXMLByDom4j().getBooks(file);  
  86.         for(Book book : bookList){  
  87.             System.out.println(book);  
  88.         }  
  89.     }  
  90.   
  91. }  

其中后两者需要导入外部jar包.


阅读更多
文章标签: Java xml
想对作者说点什么? 我来说一句

java解析xml文档方式

2012年03月16日 104KB 下载

android的xml文件的解析

2012年03月06日 68KB 下载

没有更多推荐了,返回首页

不良信息举报

java 解析xml文件的几种方式

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭