xml常用的解析器Dom4J:
XML解析:
* 解析xml可以做:
* 如果xml作为配置文件:读取
* 如果xml作为传输文件:写,读
* xml解析思想:
* DOM:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
* 优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。
* SAX:逐行读取,基于事件驱动
* 优点:不占内存,速度快
1.导入jar包 dom4j.jar
2.创建解析器
SAXReader reader = new SAXReader();
3.解析xml 获得document对象
XML解析:
* 解析xml可以做:
* 如果xml作为配置文件:读取
* 如果xml作为传输文件:写,读
* xml解析思想:
* DOM:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
* 优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。
* 缺点:dom树非常占内存,解析速度慢。
* SAX:逐行读取,基于事件驱动
* 优点:不占内存,速度快
* 缺点:只能读取,不能回写
由于DOM 和 SAX 解析各有各的缺点在现在的开发中基本不用,基本现在解析XML文件都是用DOM4J
* DOM4J:dom for java民间方式,但是是事实方式。非常好。 支持dom1.导入jar包 dom4j.jar
2.创建解析器
SAXReader reader = new SAXReader();
3.解析xml 获得document对象
Document document = reader.read(url);
.......... 下面进入代码演示
解析指定标签的下的xml中间的指定节点进行解析
public void test01() throws DocumentException {
// 文档中的固定的写法
// 创建一个xml文件解析对象
SAXReader reader = new SAXReader();
// 把xml文档加载到内存当中
Document document = reader.read("src/Book.xml");
Element root = document.getRootElement();
/*
* 得到节点名为书的这个节点
* Element bookNode= root.element("书");
* System.out.println(bookNode);
*/
//得到当前所有的子接点
List list = root.elements();
//用get()方法得到第二本书的对象
Element se = (Element) list.get(1);
//得到第二个节点下的内容
String name = se.element("书名").getText();
System.out.println(name);
}
遍历xml文件中的所有节点洗的内容是通过,递归的方法来实现的
遍历解析所有的节点
@Test //2,遍历所有节点
public void test02() throws DocumentException{
//创建解析xml解析对象
SAXReader reader = new SAXReader();
//将xml文档加载到docunmer中
Document document = reader.read("src/Book.xml");
Element root = document.getRootElement();
treeAll(root);
}
private void treeAll(Element root) {
// TODO Auto-generated method stub
System.out.println(root.getName());
for (int i = 0; i < root.nodeCount(); i++) {
Node node = root.node(1);
if (node instanceof Element) {
treeAll((Element)node);
}
}
}
遍历xml文件中的所有节点的内容是通过递归的方法来实现的