Dom4j解析和处理xml文档

jopen 12年前

本文将介绍
1.如何通过dom4j来对xml文档进行增、删、改、查
2.如何从本地读入xml文档
3.如何把xml文档转换成xml字符串
4.如何把xml输出以指定的编码输出到xml文档。
5.如何把xml字符串转换成document。

创建document、添加节点、属性及注释

package com.xml.dom4j;    import java.io.FileOutputStream;  import java.io.IOException;  import java.io.OutputStreamWriter;    import org.dom4j.Document;  import org.dom4j.DocumentHelper;  import org.dom4j.Element;  import org.dom4j.io.XMLWriter;             /**        * 创建document        * @return        */      public static Document createDomFJ(){       Document doc =DocumentHelper.createDocument();       return doc;      }            /**       * 给文档添加根节点       * @param elName 子节点名称       * @param doc   文档       * @return       */      public static Element appendChile(String elName,Document doc){       Element root=doc.addElement(elName);       return root;      }      /**       * 给父节点添加子节点       * @param elName 子节点的名称       * @param el  父节点       * @return       */      public static Element appendChile(String elName,Element el){       Element sub=el.addElement(elName);       return sub;      }      /**       * 添加子节点及其对应的值       * @param elName 子节点的名称       * @param value   子节点的值       * @param el     父节点       */      public static void appendChile(String elName,String value,Element el){       Element sub=el.addElement(elName);       sub.setText(value);      }        /**       * 根目录添加注释       * @param explain  说明文字       * @param doc       */      public static void addCommend(String explain,Document doc){       doc.addComment(explain);      }      /**       * 为子节点添加说明       * @param explain       * @param element       */      public static void addCommend(String explain,Element element){       element.addComment(explain);      }      /**       * 为节点添加属性       * @param attName       * @param attValue       * @param element       */      public static void addAttribute(String attName,String attValue,Element element){       element.addAttribute(attName, attValue);      }  }

asXML可以将文档或元素转换成一段xml字符串

String docStr=doc.asXML();  //把xml文档转换成字符串   System.out.println("docStr==="+docStr);  String pdsStr=pds.asXML();   //把父节点转换成字符串  System.out.println("pdsStr=="+pdsStr);   //结果如插图所示

parseText完成将xml字符串转换成Doc的功能

String pdsStr=<PDS><HEAD><TRNCOD>交易代码</TRNCOD><LGNNAM>登陆名称</LGNNAM></HEAD></PDS>;  Document docpds=null;  try {        docpds=DocumentHelper.parseText(docStr);        docpds.setXMLEncoding("GBK");       } catch (DocumentException e) {   // TODO Auto-generated catch block   e.printStackTrace();    }

XMLWriter类可以把文档写入到文件中,并设置编码“GBK”

public class JavaCreateDom4j {      public static void main(String[] args){       //引用http://www.blogjava.net/hoojo/archive/2011/08/11/356310.html       Document doc=createDomFJ();       doc.addComment("以GBK的编码");       Element pds=doc.addElement("PDS");       /*格式化输出*/       org.dom4j.io.OutputFormat format=org.dom4j.io.OutputFormat.createPrettyPrint();//紧缩       format.setEncoding("GBK");    //设置GBK编码       Element head=pds.addElement("HEAD");       Element trancod=head.addElement("TRNCOD");       trancod.setText("交易代码");       Element lgnnam=head.addElement("LGNNAM");       lgnnam.setText("登陆名称");          try {      XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("d:/test/xml/dom4jtest1.xml")),format);         writer.write(doc);       writer.close();       } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }      }

递归显示xml文档内容

//文件格式:  <?xml version="1.0" encoding="GBK"?>  <!--以GBK的编码-->  <PDS>    <HEAD>      <TRNCOD>交易代码</TRNCOD>      <LGNNAM>登陆名称</LGNNAM>    </HEAD>    <body>      <name>张学友</name>    </body>  </PDS>    =====================================  import java.io.File;  import java.io.FileInputStream;  import java.io.FileNotFoundException;  import java.util.List;    import org.dom4j.Document;  import org.dom4j.DocumentException;  import org.dom4j.DocumentHelper;  import org.dom4j.Element;  import org.dom4j.Node;  import org.dom4j.io.SAXReader;      public class JavaCreateDom4j {      public static void main(String[] args){       //读取xml文档       SAXReader saxReader=new SAXReader();       Document doc=null;       try {      doc =saxReader.read(new FileInputStream(new File("d:/test/xml/dom4jtest1.xml")));    } catch (FileNotFoundException e) {     // TODO Auto-generated catch block     e.printStackTrace();    } catch (DocumentException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }        List<Element> listEl=doc.getRootElement().elements();        print(listEl);  }   /**       * 递归显示文档内容       * @param els  elements数组       */      public static void print(List<Element> els){       for(Element el:els){        System.out.println("##"+el.getName()+"--value=="+el.getTextTrim());        if(el.hasContent()){         print(el.elements());        }       }      }  //结果见图”dom4j遍历xml文档“