DOM4J
DOM4J的解析(必须会,企业中用的多)
* 先下载DOM4J相应的jar包。导入工程中,才能使用。
* 把dom4j-1.6.1.jar导入到工程中。
* WEB项目:复制dom4j-1.6.1.jar到 WebRoot -- WEB-INF -- lib里面。就ok。
获取第二本书作者的文本内容
public static void run1() throws DocumentException {
//获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回Document对象
Document document= reader.read("src/book2.xml");
//获取根节点(书架标签)
Element root = document.getRootElement();
//获取第二本书的节点
List<Element> list = root.elements();
Element book2 = list.get(1);
//获取作者的标签
Element author2 = book2.element("作者");
//获取文本内容
System.out.println(author2.getText());
}
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书 出版社="b2">
<!-- 字符串 -->
<书名>javaweb开发大全</书名>
<作者 性别="男">张三</作者>
<!-- 枚举 -->
<售价>50</售价>
<简介>非常不错</简介>
<!--<猫></猫>这就是约束 -->
</书>
<书>
<书名/>葵花宝典
<团购价>9.9</团购价><作者>岳不群</作者>
<简介>欲练此功</简介>
<年代>上古时代</年代>
<年代>上古时代</年代>
</书>
</书架>
添加子节点
在第二本书下添加子节点
public static void run2() throws DocumentException, IOException, Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回Document对象
Document document= reader.read("src/book2.xml");
//获取根节点(书架标签)
Element root = document.getRootElement();
//获取第二本书
List<Element> list = root.elements("书");
Element book2 = list.get(1);
//创建节点.设置文本内容
book2.addElement("年代").setText("上古时代");
//创建漂亮格式
OutputFormat format = OutputFormat.createPrettyPrint();
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"),format);
writer.write(document);
//关流
writer.close();
}
在指定位置添加子节点
在第二本书的作者标签之前添加团购价标签
public static void run3() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回Document对象
Document document= reader.read("src/book2.xml");
//获取根节点(书架标签)
Element root = document.getRootElement();
//获取第二本书
Element book2 =(Element) root.elements("书").get(1);
//获取书下的所有子节点,返回List集合
List<Element> list = book2.elements();
//创建元素对象 DocumentHelper.createElement("狗");
Element tuangou = DocumentHelper.createElement("团购价");
tuangou.setText("9.9");
//list.add(index,Element);
list.add(1,tuangou);
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"));
writer.write(document);
writer.close();
}
删除
public static void run4() throws Exception{
//获取解析器对象
SAXReader reader = new SAXReader();
//解析xml,返回Document对象
Document document= reader.read("src/book2.xml");
//获取根节点(书架标签)
Element root = document.getRootElement();
//获取第二本书
Element book2 =(Element) root.elements("书").get(1);
Element niandai = book2.element("年代");
//删除/修改
book2.remove(niandai);
//niandai.setText("现代");
//回写
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book2.xml"));
writer.write(document);
//关流
writer.close();
}
对xpth的支持
必须导包jaxen-1.1-beta-6.jar
selectNodes("/AAA") 返回集合
selectSingleNode() 一个Node对象
参数就是xpath的语法
/AAA/BBB 获取BBB的节点
//BBB 无论层级关系,找到BBB的节点
* 代表是所有
/AAA/BBB[1] 找到BBB的第一个 /AAA/BBB[last()] 最后一个
@ 属性