使用Dom4j解析XML

摘要:Dom4j是一个用来读写xml的工具,它是用java写的,读写性能都很优异,使用起来也很容易。
目前很多Java的组件都使用Dom4j来读写xml,如Hibernate,Jaxm等等,Dom4j是一个用来读写xml的工具,它是用java写的,读写性能都很优异,使用起来也很容易。
使用Maven获取Dom4j,如下:
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>
Dom4j使用过程的抛出异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
at xmlparser.LevelsExtractor.findI(LevelsExtractor.java:73)
原因是Dom4j需要依赖jaxen.jar包,通过maven加入jaxven.jar即可:
<dependency>
     <groupId>jaxen</groupId>
     <artifactId>jaxen</artifactId>
     <version>1.1.1</version>
</dependency>

Dom4j官网: http://www.dom4j.org/

下面将讲解Dom4j的一些基本用法,由于很多例子都依赖于sea.xml文件,sea.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<sea>
  <paths>
      <path id="cacheConfig" value="redis.xml"></path>
      <path id="stateConfig" value="state.properties"></path>
  </paths>
  <ioc>
      <packages>
        <package>com.jdk.*</package>
        <package>com.ent.*</package>
        <package>com.html.*</package>
      </packages>

      <beans>
        <bean id="liveService" class="com.ent.service.LiveService">
            <method name="init">
              <param value="5"></param>
            </method>
        </bean>
        <bean id="testService1" class="com.ent.service.TestService">
        </bean>
        <bean id="testService1" class="com.ent.service.TestService">
        </bean>
      </beans>
  </ioc>
</sea>

1、获取Document对象,有三种方式,如下所示:
//读取XML文件,获得document对象
SAXReader reader = new SAXReader();
Document   document = reader.read(new File("sea.xml"));

//解析XML形式的文本,得到document对象.
String text = "<sea></sea>";
Document document = DocumentHelper.parseText(text);

//主动创建document对象.
Document document = DocumentHelper.createDocument(); //创建根节点
Element root = document.addElement("ioc");
Document对象代表整个xml文件,一般操作xml文件都需要首先获取Document对象。

2、操作节点对象的方法,如下所示:
//获取文档的根节点
Element root = document.getRootElement();

//取得某个节点的子节点
Element element=node.element("ioc");

//取得节点的文字
String text=node.getText();

//取得某节点下所有名为"ioc"的子节点,并进行遍历
List nodes = rootElm.elements("ioc");
for (Iterator it = nodes.iterator(); it.hasNext();) {
    Element elm = (Element) it.next();
    // do something
}

//遍历子节点   
for(Iterator it=root.elementIterator();it.hasNext();){
    Element element = (Element) it.next();
    // do something
}

//添加子节点
Element elm = newElm.addElement("ioc");

//设置节点文字
elm.setText("com.ent.service.*");

//删除某节点,childElement是待删除的节点,parentElement是其父节点 
parentElement.remove(childElment);

//添加一个CDATA节点
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA("cdata区域");

3、操作节点属性的方法,如下所示:
//取得某节点下的某属性   
Element root=document.getRootElement();       
Attribute attribute=root.attribute("id");

//取得属性的文字
String text=attribute.getText();

//删除某属性
Attribute attribute=root.attribute("id");
root.remove(attribute);

//遍历某节点的所有属性
Element root=document.getRootElement();   
for(Iterator it=root.attributeIterator();it.hasNext();){     
    Attribute attribute = (Attribute) it.next();     
    String text=attribute.getText();     
    System.out.println(text);
}

//设置某节点的属性和文字
newMemberElm.addAttribute("id", "liveService");

//设置属性的文字
Attribute attribute=root.attribute("id");
attribute.setText("liveService");

4、将文档写入xml文件,如下所示:
//文档中全为英文,不设置编码,直接写入的形式 
XMLWriter writer = new XMLWriter(new  FileWriter("sea.xml"));
writer.write(document);
writer.close();


//文档中含有中文,设置编码格式写入的形式
//创建文件输出的时候,自动缩进的格式
OutputFormat format = OutputFormat.createPrettyPrint();                 
format.setEncoding("UTF-8");//设置编码
XMLWriter writer = new XMLWriter(newFileWriter("sea.xml"),format);
writer.write(document);
writer.close();

5、xml与字符串互换,如下所示:
//将字符串转化为XML
String text = "<sea><ioc><packages><package>com.ent.*"+
  "</package></packages></ioc></sea>";
Document document = DocumentHelper.parseText(text);


//将文档或节点的XML转化为字符串.
SAXReader reader = new SAXReader();
Document document = reader.read(new File("sea.xml"));           
Element root=document.getRootElement();   
String docXmlText=document.asXML();
String rootXmlText=root.asXML();
Element memberElm=root.element("sea");
String memberXmlText=memberElm.asXML();

版权说明:如无特殊说明,文章均为本站原创,如需转载请注明出处

本文标题:使用Dom4j解析XML

本文地址:http://www.wolfbe.com/detail/201609/361.html

本文标签: dom4j java xml

相关文章

感谢您的支持,朗度云将继续前行

扫码打赏,金额随意

温馨提醒:打赏一旦完成,金额无法退还,请谨慎操作!

扫二维码 我要反馈 回到顶部