和DOM和SAX解析XML文件不同,通过JDOMJ方式解析XML但必须要使用第三方jar包
XML文件
冰与火之歌
乔治马丁
2014
89
安徒生童话
2004
77
English
代码:
package lowp.test.jdom;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class JDOMTest {
public static void main(String[] args) {
// 1.创建一个SAXBuilder对象(SAXBuilder是一个JDOM解析器 能将路径中的XML文件解析为Document对象)
SAXBuilder builder = new SAXBuilder();
try {
// 2.创建一个输入流,将xml文件加载到输入流
InputStream is = new FileInputStream("src/res/books.xml");
//防止乱码
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
// 3.通过builder的build方法,将输入流加载到builder中
Document document = builder.build(isr);
//Document document = builder.build(new File("src/res/books.xml"));
//Document document = builder.build("src/res/books.xml");
// 4.获取xml的根节点(根据根节点获取子节点)
Element rootElement = document.getRootElement();
// 5.获取子节点集合
List bookList = rootElement.getChildren();
// 6.遍历解析xml
for (Element book : bookList) {
System.out.println("===开始解析" + (bookList.indexOf(book) + 1)
+ "本书===");
/**
* (1)解析book节点的属性集合(不清楚book节点下属性的名称和数量)
*/
List attrList = book.getAttributes();
//【1】遍历属性
for (Attribute attr : attrList) {
//获取属性名
String attrName = attr.getName();
//获取属性值
String attrValue = attr.getValue();
System.out.println("属性名:" + attrName +"--->属性值:" + attrValue);
}
/**
* (2)遍历book节点的子节点的节点名和节点值
*/
//获取book节点的子节点集合
List bookChils = book.getChildren();
for (Element child : bookChils) {
String childName = child.getName();
String chileValue = child.getValue();
System.out.println("节点名:" + childName + "--->节点值:" + chileValue);
}
System.out.println("===结束解析" + (bookList.indexOf(book) + 1)
+ "本书===");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
===开始解析1本书=== 属性名:id--->属性值:1 节点名:name--->节点值:冰与火之歌 节点名:author--->节点值:乔治马丁 节点名:year--->节点值:2014 节点名:price--->节点值:89 ===结束解析1本书=== ===开始解析2本书=== 属性名:id--->属性值:2 节点名:name--->节点值:安徒生童话 节点名:year--->节点值:2004 节点名:price--->节点值:77 节点名:language--->节点值:English ===结束解析2本书===