JDOM及DOM4J都是java非官方的解析方式,所以都要引入jar包,JDOM方式需要导入jdom.jar,DOM4J方式需要导入dom4j.jar
解析xml文件有时会出现乱码问题:xml文件中定义的encoding不匹配
解决方法:
(1)针对xml文件:修改encoding字符集
(2)针对代码:创建字符流时,使用InputStreamReader(in, charsetName)
JDOM解析代码:
package com.imooc.jdomtest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
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 {
/**
* @param args
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) {
// 进行对book.xml文件的解析工作
// 1.创建一个SAXBuilder的对象
SAXBuilder saxBuilder = new SAXBuilder();
try {
// 2.创建一个输入流,将xml文件加载到输入流中
InputStream is = new FileInputStream("book.xml");
// 3.通过SAXBuilder的build方法,将输入流加载到SAXBuilder中
Document document = saxBuilder.build(is);
// 4.通过document对象获得xml文件的根节点
Element rootElement = document.getRootElement();
// 5.获取根节点下的子节点的List集合
List bookList = rootElement.getChildren();
// 继续进行解析
for (Element book : bookList) {
System.out.println("======开始解析第" + (bookList.indexOf(book) + 1)
+ "本书=====");
// //知道属性名称时
// Attribute att=book.getAttribute("id");
// 解析book的属性(针对不清楚属性个数和名称)
List attrList = book.getAttributes();
// 遍历attrList
for (Attribute attr : attrList) {
// 获取属性名
String attrName = attr.getName();
// 获取属性值
String attrValue = attr.getValue();
System.out
.println("属性名:" + attrName + "--属性值:" + attrValue);
}
// 对book结点的子节点进行遍历
List bookChildren = book.getChildren();
for (Element child : bookChildren) {
System.out.println("结点名:" + child.getName() + "--结点值:"
+ child.getValue());
}
System.out.println("======结束解析第" + (bookList.indexOf(book) + 1)
+ "本书=====");
}
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
DOM4J解析代码:
import java.io.File;
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;
public class DOM4jTest {
/**
* @param args
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) {
// 解析book.xml
// 创建SAXReader对象
SAXReader reader = new SAXReader();
try {
// 通过reader对象的read方法加载xml文件
Document document = reader.read(new File("book.xml"));
// 通过document对象获得根节点
Element bookstore = document.getRootElement();
// 通过element对象elementIterator()方法获得迭代器
Iterator it = bookstore.elementIterator();
// 遍历迭代器,获取根节点中的信息
while (it.hasNext()) {
System.out.println("=================开始遍历某一本书================");
Element book = (Element) it.next();
// 获取book的属性名和属性值
List bookAttr = book.attributes();
for (Attribute attr : bookAttr) {
System.out.println("属性名:" + attr.getName() + "--属性值:"
+ attr.getValue());
}
Iterator itt = book.elementIterator();
while (itt.hasNext()) {
Element bookChild = (Element) itt.next();
System.out.println("结点名:" + bookChild.getName() + "--结点值:"
+ bookChild.getStringValue());
}
System.out.println("=================结束遍历某一本书================");
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
若希望导入的jar包能随着项目的迁移而迁移,可以在src下新建一个folder(取名lib),再将jar包拷到lib中,在Build Bath中添加lib中的jar包。