java采用Dom4j读写xml文件

来源:互联网 发布:jquery传递json数据 编辑:程序博客网 时间:2024/05/23 15:38

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