java採用Dom4j讀寫xml文件

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文件到此就結束了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章