Java_解析XML文件

XML是可扩展标记语言的简称,作为一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性 给数据集成与交互带来了极大的方便。XML在不同语言中的解析方式都是一样的,只不过实现的语言不同而已。

在Java中,XML的解析方式有四种,分别是:DOM解析;SAX解析;JDOM解析;DOM4J解析。前两种属于官方自带的解析方式,与平台无关;后两者是扩展方法,只适用于Java平台。

OK,这篇,我们只研究使用最广泛的DOM4J。

1、简介:

关于dom4j,首先我们要知道,它不是属于Java自带的解析XML方式,也就是说,要想使用dom4j,首先你需要先添加dom4j jar包。

OK,添加完jar包之后,我们就可以研究下它的语法了。

2、语法:

1)、获取根元素:

Element e1 = document.getRootElement();

2)、获取某个元素下面的子元素:

Element e2 = root.element("xxx");

3)、获取元素的子元素集合1 (所有子元素)

List<Element> e_list = e2.elements();

4)、获取元素的子元素集合2(指定名称的子元素集合)

List<Element> e_list = e2.elements("user");

5)、获取元素属性的值

elements.attributeValue("name");

6)、获取元素的内容

element.getText();

。。。

 

3、一个栗子:

<?xml version="1.0" encoding="UTF-8"?>  
<bookstore>  
    <book id="1">  
        <name>Java</name>  
        <author>aaa</author>  
        <year>2014</year>  
        <price>89</price>  
    </book>  
    <book id="2">  
        <name>Linux</name>  
        <author>bbb</author>  
        <year>2015</year>  
        <price>77</price>  
    </book>  
    <book id="3">  
        <name>Spring</name>  
        <author>ccc</author>  
        <year>2016</year>  
        <price>100</price>  
    </book>  
</bookstore>

public class Book {
	private int id;
	private String name;
	private String author;
	private int year;
	private double price;
	
	//setter,getter ...

	@Override
	public String toString() {
		return "Book [id=" + id + ", name=" + name + ", author=" + author
				+ ", year=" + year + ", price=" + price + "]";
	}
}

public class Test09 {
	
	private List<Book> bookList = null;
	private Book book = null;
	
	private List<Book> getBooks(File file) {
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read(file);
			Element bookstore = document.getRootElement();
			Iterator stores = bookstore.elementIterator();
			bookList = new ArrayList<Book>();
			while(stores.hasNext()){
				book = new Book();
				Element bookElement = (Element) stores.next();
				List<Attribute> attributes = bookElement.attributes();
				for(Attribute attribute : attributes){
					if(attribute.getName().equals("id")){
						String id = attribute.getValue();
						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")){
						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.setName(price);
					}
				}
				bookList.add(book);
				book = null;
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return bookList;
	}
	
	public static void main(String[] args) {
		File file = new File("src/java_19/book.xml");
		List<Book> bookList = new Test09().getBooks(file);
		for(Book book:bookList){
			System.out.println(book);
		}
		
	}
}

 控制台输出:

Book [id=1, name=89, author=aaa, year=2014, price=0.0]
Book [id=2, name=77, author=bbb, year=2015, price=0.0]
Book [id=3, name=100, author=ccc, year=2016, price=0.0]

 

OK,先这样,饿了 准备下班...

 

dom4j各种方法请参考:https://www.cnblogs.com/maxudong/p/8710291.html

java解析xml四种方法请参考:https://www.cnblogs.com/longqingyang/p/5577937.html

 

posted @ 2019-05-17 17:45  一枚路过的小码农  阅读(1822)  评论(0编辑  收藏  举报