DOM4J

题记:最早的xml文档解析标准是W3C的DOM/SAX, 之后SUN对其封装,做成了JAVA的标准库JAXP(Java API for XML processing), 但JAXP本身还是用DOM/SAX的方式处理xml文件.由于DOM/SAX比较难于使用,于是后来开发了JDOM/DOM4J,特别是DOM4J,在易用性和效率上有很大的提升,Hibernate的文档读取使用的就是DOM4J(Spring用的是DOM/SAX).所以推荐使用DOM4J.
引用
http://robertleepeak.iteye.com/blog/219678

1.DOM/SAX处理XML的区别:
1) DOM:将 XML文档全部加载在内存中,适合文档不大但经常访问。
2) SAX(Simple API for XML):事件驱动读写XML,不会多次加载,担再次访问需要重新读取。

2.XML的SAX读取和遍历:

SAXReader reader = new SAXReader();
document = reader.read(new File("resource/example.xml"));
Element root = document.getRootElement();

//遍历
Iterator it = root.elementIterator();
while (it.hasNext()) {
            Element e = it.next();
            System.out.println(e.getName() + " : " + e.getData());
        }


3.XML的DOM读取和遍历:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

//DOM读取好恶心,步骤这么长,竟然还需要W3C的Document类,以后弃用之
org.w3c.dom.Document doc = builder.parse(new File("resource/test.xml"));
DOMReader reader = new DOMReader();
Document document = reader.read(doc);

//遍历
Iterator<Element> it = document.getRootElement().elementIterator();


4.XML的写入:
Document document = DocumentHelper.createDocument();
document.addElement().add....
FileWriter fileWriter = new FileWriter("resource/writer001.xml");
document.write(fileWriter);

//此句非常重要,否则不能写入文档
fileWriter.close();


上面的方式写出的XML文档没有缩进,可以用下面的方式加上缩进。
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter("resource/writer002.xml"), format);
writer.write(document);
//此句非常重要,否则不能写入文档
writer.close();


5.XML的XPath查找:
    XPath语法:
  • /:根路径
  • //:任一路径
  • .:当前节点
  • ..:当前节点的父节点
  • @:属性
  • /*:所有元素
  • @*:所有属性

Document doc = new SAXReader().read(new File("resource/test.xml"));
List<Element>  list = doc.selectNodes("/Book/name");
List<Element>  list = doc.selectNodes("//name");
List<Element>  list = doc.selectNodes("/Book/name/*");
List<Element>  list = doc.selectNodes("/Book//name[@size = '5']");
Node node= doc.selectSingleNode("/Book/name/firstName");

注:使用DOM4J的XPath还需要jaxen-1.1-7.jar, 要不然会报Exception:NoClassDefFoundError

你可能感兴趣的:(java,spring,xml,Hibernate,sun)