首先有一段xml文件如下,有三个子节点book,每个节点里有属性id,name,author,price
<books>
<book id="000001">
<name> 钢铁是怎样炼成的</name>
<author> 尼古拉·奥斯特洛夫斯基</author>
<price> 46.80</price>
</book>
<book id="000002">
<name> 自然科学</name>
<author> 牛顿</author>
<price> 32.50</price>
</book>
<book id="000003">
<name> 时间简史</name>
<author> 霍金</author>
<price> 55.50</price>
</book>
</books>
XML文件的解析就是将XML文件里的数据提取出来,封装成对象,便于观看。所以创建相应的类BOOK类,里面有四个属性,创建相应的构造方法,set和get方法
public class Book {
private String id;
private String name;
private String auther;
private String price;
public Book(String id, String name, String auther, String price) {
this.id = id;
this.name = name;
this.auther = auther;
this.price = price;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuther() {
return auther;
}
public void setAuther(String auther) {
this.auther = auther;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", auther='" + auther + '\'' +
", price=" + price +
'}';
}
}
使用DOM4J方法进行解析,是如今最流行的方法,需要jar包,在lib目录下是本次需要的jar包
编写解析方法,思路如下
/* 1 saxreader.read:创建输入流,读取XML文件,注意地址
2 dom.getRootElement()获取对象根元素,再利用根元素根据标签名得到子元素集
3 遍历子元素集合,可以通过asXML把标签对象转变成标签字符串查看
3.1可以利用elements方法:根据标签名获得想要的元素标签,用getText方法,从标签中获取内容
3.2 或者直接elementText方法,根据标签名获得里面内容
4 标签的属性要用attributeValue(),标签的子元素是elementText()
5 封装成对象,便于打印输出,完成对XML文件的解析,所以解析之前要知道节点标签有哪些,创建相应的类
*/public class Dom4j {
public static void main(String[] args) {
SAXReader saxreader = new SAXReader(); /* 创建一个输入流,去读取xml配置文件*/
Document dom = null;
try { //io流读取一般都有异常
dom = saxreader.read("src/my/Books.xml"); //生成document对象
} catch (Exception e) {
e.printStackTrace();
}
Element rootEle = dom.getRootElement(); //获取对象根元素
List<Element> books = rootEle.elements("book"); //element和elements都是根据标签名获取子元素
for (Element e : books) {
Element elename = e.element("name");
//System.out.println(elename.asXML()); //asXML把标签对象转变成标签字符串
String name = elename.getText(); //getText从标签中获取文本内容
String author = e.elementText("author");
String price = e.elementText("price");
String id = e.attributeValue("id"); //获取属性
Book book = new Book(id, name, author, price);
System.out.println(book);
}
}
}
结果输出如下