dom4j解析和处理xml文档

本文将介绍
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");

递归显示xml文档内容
//文件格式:
<?xml version="1.0" encoding="GBK"?>
<!--以GBK的编码-->
<PDS>
  <HEAD>
    <TRNCOD>交易代码</TRNCOD>
    <LGNNAM>登陆名称</LGNNAM>
  </HEAD>
  <body>
    <name>张学友</name>
  </body>
</PDS>




//dom4j遍历xml文档
=====================================
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());
    }
    }
    }
    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();
}
    }

你可能感兴趣的:(dom4j)