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