JAXP是sun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J。
- Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
- Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
- 使用Dom4j开发,需下载dom4j相应的jar文件。
- Dom4j的使用可参见其所提供的文档(quick start)
DOM4J需要加入两个包:dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar
参考下载地址:http://pan.baidu.com/s/1eS3X3DS
完整代码:
package package1112; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.IllegalAddException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class third {
private static void find() throws DocumentException
{
//解析xml文档
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查
Element root = document.getRootElement();
List<Element> list =root.elements();
List<Element> list1 = list.get(1).elements();
System.out.println(list1.get(1).getText());
//输出特定节点特定属性的属性值
Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0);
System.out.println(e.attributeValue("title"));
}
/**创建子节点
* @throws DocumentException
* @throws IllegalAddException
* @throws IOException
*/
private static void addElement() throws DocumentException,IllegalAddException, IOException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 使用工具类DocumentHelper创建结点
Element e = DocumentHelper.createElement("languge");
e.setText("Chinese");
e.addAttribute("bb", "boy");
// 寻找父节点
Element ee = (Element) document.selectNodes("//book").get(1);
// 添加结点至内存文档
ee.add(e);
// Writing a document to a file,可以参考dom4j的API
XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
writer.write(document);
writer.close();
} /**删除子节点
* @throws DocumentException
* @throws IOException
*/
private static void deleteElement() throws DocumentException, IOException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 读取待删除结点的父节点
Element e = (Element) document.selectNodes("//languge").get(0);
// 移除结点(内存)
e.getParent().remove(e);
// Writing a document to a file,可以参考dom4j的API
XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
writer.write(document);
writer.close();
} public static void main(String[] args) throws DocumentException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
}
}
代码解析:
总体:三个功能函数,一个主函数
功能函数1:find()
两种方式(传统方式,Xpath方式)输出特定节点的文本内容
输出特定的属性值
传统方式:
private static void find() throws DocumentException
{
//解析xml文档
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// Xpath解析模式
Element e = (Element) document.selectNodes("//title").get(1);
System.out.println(e.getText());
}
Xpath方式:
private static void find() throws DocumentException
{
//解析xml文档
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 传统解析模式,不能根据结点名称直接查找,只能一级一级的往下查
Element root = document.getRootElement();
List<Element> list =root.elements();
List<Element> list1 = list.get(1).elements();
System.out.println(list1.get(1).getText());
//输出特定节点特定属性的属性值
Element e = (Element) document.selectNodes("//comment[@id='S002']").get(0);
System.out.println(e.attributeValue("title"));
}
功能函数二: addElement()
创建新节点
private static void addElement() throws DocumentException,IllegalAddException,
IOException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 使用工具类DocumentHelper创建结点
Element e = DocumentHelper.createElement("languge");
e.setText("Chinese");
e.addAttribute("bb", "boy");
// 寻找父节点
Element ee = (Element) document.selectNodes("//book").get(1);
// 添加结点至内存文档
ee.add(e);
// Writing a document to a file,可以参考dom4j的API
XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
writer.write(document);
writer.close();
}
功能函数三:deleteElement()
删除节点
private static void deleteElement() throws DocumentException, IOException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("WebRoot/xml/t6.xml"));
// 读取待删除结点的父节点
Element e = (Element) document.selectNodes("//languge").get(0);
// 移除结点(内存)
e.getParent().remove(e);
// Writing a document to a file,可以参考dom4j的API
XMLWriter writer = new XMLWriter(new FileWriter("WebRoot/xml/t6.xml"));
writer.write(document);
writer.close();
}