DOM4J 是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的 Java 軟件都在使用 DOM4J 來讀寫 XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。
由於Dom4j是第三方插件,首先要在dom4j官網下載jar包: http://dom4j.sourceforge.net/
在項目中的src有一個xml文件hibernate.cfg.xml,大家都知道,這個是hibernate.cfg.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="hibernate.connection.username">scott</property>
<property name="hibernate.connection.password">Oracle123</property>
</session-factory>
</hibernate-configuration>
src下還要一個dtd文件,hibernate-configuration-3.0.dtd,這個文件在hibernate官網提供的zip包中有
我們新建一個測試類名爲Dom4jTest.java,在類中寫一個讀取xml得方法,名字就叫read吧
public void read(){
//創建SAX解析對象
SAXReader r = new SAXReader();
r.setMergeAdjacentText(true);//在讀取xml文件時忽略空白,默認爲false
r.setValidation(true);//設置在讀取時是否驗證相應的dtd文件,這裏要注意,在沒有寬帶連接的情況下,將該屬性設置爲true後,將無法解析xml,應爲找不到相應的dtd文件。如果我們要與本機上的某個dtd文件驗證的話,可以添加以下代碼:
r.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
InputSource source = new InputSource(this.getClass().getResourceAsStream("/hibernate-configuration-3.0.dtd"));
source.setPublicId(publicId);
source.setSystemId(systemId);
return source;
}
});
//讀取指定路徑的XML,解析獲得Document對象
Document docment = r.read(Dom4jTest.class.getResourceAsStream("/hibernate.cfg.xml"));//這句話表示要解析的xml文件在src下
String docType=docment.getDocType();//獲取文檔類型
//獲取根節點
Element root= document.getRootElement();
//取得session-factory節點
Element sessionFactory = root.element("session-factory");
//得到節點集合的迭代器
Itertator<Element> itr = sessionFactory.elementIterator("property");
//循環得到session-factory節點下的每一個子節點
while(itr.hasNext()){'
Element prop=itr.next();
prop.getName();//得到節點名字
prop.getAttributeValue("name");//獲取屬性name的值
prop.getText();//獲取該節點的文本值
}
}
這是怎樣去讀取xml文件,接下來說說怎麼寫xml文件
寫一個方法,名爲write
public void write(){
//得到Document對象
Document document = DocumentHelper.createDocument();
//添加文檔類型
document.addDocType("hibernate-configuration", "-//Hibernate/Hibernate Configuration DTD 3.0//EN", "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd");
//寫根節點
Element root = document.addElement("hibernate-configuration");
//寫session-factory
Element sessionFactory = root.addElement("session-factory");
//寫session-factory下的子節點
sessionFactory.addElement("property").addAttribute("name", "hibernate.connection.driver_class").addText("oracle.jdbc.driver.OracleDriver");
sessionFactory.addElement("property").addAttribute("name", "hibernate.connection.url").addText("jdbc:oracle:thin:@localhost:1521:orcl");
sessionFactory.addElement("property").addAttribute("name", "hibernate.connection.username").addText("scott");
sessionFactory.addElement("property").addAttribute("name", "hibernate.connection.password").addText("Oracle123");
//指定要寫入的文件
Writer writer = new FileWriter("src/test.xml");
//格式化輸出
OutputFormat format = new OutputFormat();
format.setIndent(true);是否有縮進
format.setIndentSize(6);縮進6個字符
format.setNewlines(true);是否換行
//創建xml輸出對象
XMLWriter out = new XMLWriter(writer,format);
out.writer(document);
out.flush();
out.close();
}
Dom4j讀寫xml文件到此就結束了