解析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
- <?xmlversion=“1.0”encoding=“UTF-8”?>
- <bookstore>
- <bookid=“1”>
- <name>冰与火之歌</name>
- <author>乔治马丁</author>
- <year>2014</year>
- <price>89</price>
- </book>
- <bookid=“2”>
- <name>安徒生童话</name>
- <author>安徒生</author>
- <year>2004</year>
- <price>77</price>
- </book>
- <bookid=“3”>
- <name>thinkthinkthink</name>
- <author>aaa</author>
- <year>1997</year>
- <price>100</price>
- </book>
- </bookstore>
<?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>
bean类:Book.java
[java] view plain copy print?
- publicclassBook{
- /**
- *@authorlune
- */
- privateintid;
- privateStringname;
- privateStringauthor;
- privateintyear;
- privatedoubleprice;
- /**
- *@returntheid
- */
- publicintgetId(){
- returnid;
- }
- /**
- *@paramidtheidtoset
- */
- publicvoidsetId(intid){
- this.id=id;
- }
- /**
- *@returnthename
- */
- publicStringgetName(){
- returnname;
- }
- /**
- *@paramnamethenametoset
- */
- publicvoidsetName(Stringname){
- this.name=name;
- }
- /**
- *@returntheauthor
- */
- publicStringgetAuthor(){
- returnauthor;
- }
- /**
- *@paramauthortheauthortoset
- */
- publicvoidsetAuthor(Stringauthor){
- this.author=author;
- }
- /**
- *@returntheyear
- */
- publicintgetYear(){
- returnyear;
- }
- /**
- *@paramyeartheyeartoset
- */
- publicvoidsetYear(intyear){
- this.year=year;
- }
- /**
- *@returntheprice
- */
- publicdoublegetPrice(){
- returnprice;
- }
- /**
- *@parampricethepricetoset
- */
- publicvoidsetPrice(doubleprice){
- this.price=price;
- }
- @Override
- publicStringtoString(){
- return“Book[id=”+id+“,name=”+name+“,author=”+author+“,year=”+year+“,price=”+price+“]”;
- }
- }
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 print?
- importjava.util.ArrayList;
- importjava.util.List;
- importjavax.xml.parsers.Documentbuilder;
- importjavax.xml.parsers.DocumentBuilderFactory;
- importjavax.xml.parsers.ParserconfigurationException;
- importorg.w3c.dom.Document;
- importorg.w3c.dom.NamedNodeMap;
- importorg.w3c.dom.NodeList;
- importcom.lune.bean.Book;
- /**
- *用DOM方式读取xml文件
- *@authorlune
- */
- publicclassReadxmlByDom{
- privatestaticDocumentBuilderFactorydbFactory=null;
- privatestaticDocumentBuilderdb=null;
- privatestaticDocumentdocument=null;
- privatestaticList<Book>books=null;
- static{
- try{
- dbFactory=DocumentBuilderFactory.newinstance();
- db=dbFactory.newDocumentBuilder();
- }catch(ParserConfigurationExceptione){
- e.printstacktrace();
- }
- }
- publicstaticList<Book>getBooks(StringfileName)throwsException{
- //将给定URI的内容解析为一个XML文档,并返回Document对象
- document=db.parse(fileName);
- //按文档顺序返回包含在文档中且具有给定标记名称的所有Element的NodeList
- NodeListbookList=document.getElementsByTagName(”book”);
- books=newArrayList<Book>();
- //遍历books
- for(inti=0;i<bookList.getLength();i++){
- Bookbook=newBook();
- //获取第i个book结点
- org.w3c.dom.Nodenode=bookList.item(i);
- //获取第i个book的所有属性
- NamedNodeMapnamedNodeMap=node.getAttributes();
- //获取已知名为id的属性值
- Stringid=namedNodeMap.getNamedItem(”id”).getTextcontent();//System.out.println(id);
- book.setId(integer.parseInt(id));
- //获取book结点的子节点,包含了Test类型的换行
- NodeListcList=node.getChildNodes();//System.out.println(cList.getLength());9
- //将一个book里面的属性加入数组
- ArrayList<String>contents=newArrayList<>();
- for(intj=1;j<cList.getLength();j+=2){
- org.w3c.dom.NodecNode=cList.item(j);
- Stringcontent=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);
- }
- returnbooks;
- }
- publicstaticvoidmain(Stringargs[]){
- StringfileName=”src/res/books.xml”;
- try{
- List<Book>list=ReadxmlByDom.getBooks(fileName);
- for(Bookbook:list){
- System.out.println(book);
- }
- }catch(Exceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- }
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[java] view plain copy print?
- importjava.util.ArrayList;
- importjava.util.List;
- importorg.xml.sax.Attributes;
- importorg.xml.sax.SAXException;
- importorg.xml.sax.helpers.DefaultHandler;
- importcom.lune.bean.Book;
- /**
- *用SAX解析xml文件时需要的handler
- *@authorlune
- */
- publicclassSAXParseHandlerextendsDefaultHandler{
- privateList<Book>list;//存放解析到的book数组
- privateBookbook;//存放当前解析的book
- privateStringcontent=null;//存放当前节点值
- /**
- *开始解析xml文档时调用此方法
- */
- @Override
- publicvoidstartDocument()throwsSAXException{
- super.startDocument();
- System.out.println(”开始解析xml文件”);
- list=newArrayList<Book>();
- }
- /**
- *文档解析完成后调用此方法
- */
- @Override
- publicvoidendDocument()throwsSAXException{
- super.endDocument();
- System.out.println(”xml文件解析完毕”);
- }
- /**
- *开始解析节点时调用此方法
- */
- @Override
- publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)throwsSAXException{
- super.startElement(uri,localName,qName,attributes);
- //当节点名为book时,获取book的属性id
- if(qName.equals(“book”)){
- book=newBook();
- Stringid=attributes.getValue(”id”);//System.out.println(“id值为”+id);
- book.setId(Integer.parseInt(id));
- }
- }
- /**
- *节点解析完毕时调用此方法
- *
- *@paramqName节点名
- */
- @Override
- publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{
- super.endElement(uri,localName,qName);
- if(qName.equals(“name”)){
- book.setName(content);
- //System.out.println(“书名”+content);
- }elseif(qName.equals(“author”)){
- book.setAuthor(content);
- //System.out.println(“作者”+content);
- }elseif(qName.equals(“year”)){
- book.setYear(Integer.parseInt(content));
- //System.out.println(“年份”+content);
- }elseif(qName.equals(“price”)){
- book.setPrice(Double.parseDouble(content));
- //System.out.println(“价格”+content);
- }elseif(qName.equals(“book”)){//当结束当前book解析时,将该book添加到数组后置为空,方便下一次book赋值
- list.add(book);
- book=null;
- }
- }
- /**
- *此方法用来获取节点的值
- */
- @Override
- publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{
- super.characters(ch,start,length);
- content=newString(ch,start,length);
- //收集不为空白的节点值
- //if(!content.trim().equals(“”)){
- //System.out.println(“节点值为:”+content);
- //}
- }
- publicList<Book>getBooks(){
- returnlist;
- }
- }
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 print?
- importjava.io.IOException;
- importjava.util.List;
- importjavax.xml.parsers.ParserConfigurationException;
- importjavax.xml.parsers.SAXParser;
- importjavax.xml.parsers.SAXParserFactory;
- importorg.xml.sax.SAXException;
- importorg.xml.sax.helpers.ParserFactory;
- importcom.lune.bean.Book;
- importcom.lune.handler.SAXParseHandler;
- /**
- *用SAX方式读取xml文件
- *@authorlune
- */
- publicclassReadXmlBySAX{
- privatestaticList<Book>books=null;
- privateSAXParserFactorysParserFactory=null;
- privateSAXParserparser=null;
- publicList<Book>getBooks(StringfileName)throwsException{
- SAXParserFactorysParserFactory=SAXParserFactory.newInstance();
- SAXParserparser=sParserFactory.newSAXParser();
- SAXParseHandlerhandler=newSAXParseHandler();
- parser.parse(fileName,handler);
- returnhandler.getBooks();
- }
- /**
- *@paramargs
- */
- publicstaticvoidmain(String[]args){
- try{
- books=newReadXmlBySAX().getBooks(“src/res/books.xml”);
- for(Bookbook:books){
- System.out.println(book);
- }
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- }
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();
}
}
}
3.JDOM方式解析XML
[java] view plain copy print?
- importjava.io.fileinputstream;
- importjava.io.filenotfoundException;
- importjava.io.IOException;
- importjava.util.ArrayList;
- importjava.util.List;
- importorg.jdom2.JDOMException;
- importorg.jdom2.input.SAXBuilder;
- importcom.lune.bean.Book;
- importorg.jdom2.*;
- /**
- *用JDOM方式读取xml文件
- *@authorlune
- */
- publicclassReadXMLByJDom{
- privateList<Book>books=null;
- privateBookbook=null;
- publicList<Book>getBooks(StringfileName){
- SAXBuildersaxBuilder=newSAXBuilder();
- try{
- Documentdocument=saxBuilder.build(newFileInputStream(fileName));
- //获取根节点bookstore
- ElementrootElement=document.getRootElement();
- //获取根节点的子节点,返回子节点的数组
- List<Element>bookList=rootElement.getchildren();
- books=newArrayList<Book>();
- for(ElementbookElement:bookList){
- book=newBook();
- //获取bookElement的属性
- List<Attribute>bookAttributes=bookElement.getAttributes();
- for(Attributeattribute:bookAttributes){
- if(attribute.getName().equals(“id”)){
- Stringid=attribute.getValue();//System.out.println(id);
- book.setId(Integer.parseInt(id));
- }
- }
- //获取bookElement的子节点
- List<Element>children=bookElement.getChildren();
- for(Elementchild:children){
- if(child.getName().equals(“name”)){
- Stringname=child.getValue();//System.out.println(name);
- book.setName(name);
- }elseif(child.getName().equals(“author”)){
- Stringauthor=child.getValue();
- book.setAuthor(author);//System.out.println(author);
- }elseif(child.getName().equals(“year”)){
- Stringyear=child.getValue();
- book.setYear(Integer.parseInt(year));
- }elseif(child.getName().equals(“price”)){
- Stringprice=child.getValue();
- book.setPrice(Double.parseDouble(price));
- }
- }
- books.add(book);
- book=null;
- }
- }catch(FileNotFoundExceptione){
- e.printStackTrace();
- }catch(JDOMExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- returnbooks;
- }
- publicstaticvoidmain(String[]args){
- //TODOAuto-generatedmethodstub
- StringfileName=”src/res/books.xml”;
- List<Book>books=newReadXMLByJDom().getBooks(fileName);
- for(Bookbook:books){
- System.out.println(book);
- }
- }
- }
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 print?
- importjava.io.File;
- importjava.util.ArrayList;
- importjava.util.Iterator;
- importjava.util.List;
- importorg.dom4j.Attribute;
- importorg.dom4j.Document;
- importorg.dom4j.DocumentException;
- importorg.dom4j.Element;
- importorg.dom4j.io.SAXReader;
- importcom.lune.bean.Book;
- /**
- *用DOM4J方法读取xml文件
- *@authorlune
- */
- publicclassReadXMLByDom4j{
- privateList<Book>bookList=null;
- privateBookbook=null;
- publicList<Book>getBooks(Filefile){
- SAXReaderreader=newSAXReader();
- try{
- Documentdocument=reader.read(file);
- Elementbookstore=document.getRootElement();
- Iteratorstoreit=bookstore.elementIterator();
- bookList=newArrayList<Book>();
- while(storeit.hasNext()){
- book=newBook();
- ElementbookElement=(Element)storeit.next();
- //遍历bookElement的属性
- List<Attribute>attributes=bookElement.attributes();
- for(Attributeattribute:attributes){
- if(attribute.getName().equals(“id”)){
- Stringid=attribute.getValue();//System.out.println(id);
- book.setId(Integer.parseInt(id));
- }
- }
- Iteratorbookit=bookElement.elementIterator();
- while(bookit.hasNext()){
- Elementchild=(Element)bookit.next();
- StringnodeName=child.getName();
- if(nodeName.equals(“name”)){
- //System.out.println(child.getStringValue());
- Stringname=child.getStringValue();
- book.setName(name);
- }elseif(nodeName.equals(“author”)){
- Stringauthor=child.getStringValue();
- book.setAuthor(author);
- }elseif(nodeName.equals(“year”)){
- Stringyear=child.getStringValue();
- book.setYear(Integer.parseInt(year));
- }elseif(nodeName.equals(“price”)){
- Stringprice=child.getStringValue();
- book.setPrice(Double.parseDouble(price));
- }
- }
- bookList.add(book);
- book=null;
- }
- }catch(DocumentExceptione){
- e.printStackTrace();
- }
- returnbookList;
- }
- /**
- *@paramargs
- */
- publicstaticvoidmain(String[]args){
- //TODOAuto-generatedmethodstub
- Filefile=newFile(“src/res/books.xml”);
- List<Book>bookList=newReadXMLByDom4j().getBooks(file);
- for(Bookbook:bookList){
- System.out.println(book);
- }
- }
- }
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);
}
}
}
其中后两者需要导入外部jar包.
文章中的源码可在下面地址下载:
http://github.com/clemontine/XMLParser
相关阅读
本篇文章从整个搜索引擎架构技术大框架方面来学习,搜索引擎工作原理。 1 搜索引擎基本模块 2 爬虫 网络爬虫(Web crawler),是
今天整理了下面试中会经常出现的一些问题。 1.线程的几种状态和相互的转换? 回答要点: 1)线程有5中状态,分别是: 创建 就绪 运行 阻塞
Effective Java 第 3 版(中文版)PDF 下载
微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 简介 本书一共包含 90 个条目,每个条目讨论 Java 程序
/* 方法的重载特性(overload) 在同一个类中,允许出现同名的方法,只要方法的参数列表不同即可,这就是方法的重载 参数列表不同:参数个数
Java读取ZIP文件ZipEntry.getsize()总是返回-1?
解决方法(Code)在文章最后面,耐心看完 今天在项目中遇到一个问题,有一个需求是需要验证下载的ZIP文件,解压读取ZIP文件夹内部的文件,文