package org.xqlee.utils.xml;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
*
*
*
* _________________________INFO_____________________________
* | Description : [dom4j处理xml]
* | Encoding : [UTF-8]
* | Package : [org.xqlee.utils.xml.test]
* | Project : [utils]
* | Author : [LXQ]
* | CreateDate : [2016年3月23日上午11:14:35]
* | Updater : []
* | UpdateDate : []
* | UpdateRemark: []
* | Company : [www.zhljc.com]
* | Version : [v 1.0]
* | Libs : [dom4j-1.6.1.jar xml-apis-1.0b2.jar jaxen-1.1.6.jar]
* __________________________________________________________
*
*/
public class Dom4j {
public static void main(String[] params) {
System.out.println("=====1.开始生产xml=====");
String xml = createXML();
System.out.println("=====2.结束生产xml=====");
System.out.println("=====3.第一次解析=====");
String2XML(xml);
System.out.println("=====4.第二次解析");
xml=" "+xml;//注意xml文档的<?xml version="1.0" encoding="GBK"?>前面不允许有其他值
String2XML(xml);
}
/**
* 创建xml
*
* @return xml文档字符串
*/
public static String createXML() {
System.out.println("============xml创建===============");
// 1.创建文档
Document doc = DocumentHelper.createDocument();
// 设置文件编码格式
doc.setXMLEncoding("GBK");
// 2.文档中添加节点||注意文档中只能有一个root节点
Element root = doc.addElement("ROOT");
root.addAttribute("root", "http://www.zhljc.com");
// 头部
Element header = root.addElement("HEADER");
header.addAttribute("header", "http://zhljc.com");
header.addElement("HPARAM1").addText("Header param 1");
header.addElement("HPARAM2").addText("Header param 2");
// fields
Element f1 = header.addElement("field");
f1.addAttribute("name", "F1");
f1.addText("0000f2");
Element f2 = header.addElement("field");
f2.addAttribute("name", "F2");
f2.addText("0000f2");
Element f3 = header.addElement("field");
f3.addAttribute("name", "F3");
f3.addText("0000f3");
// body
Element body = root.addElement("BODY");
body.addAttribute("body", "http://www.zhljc.com");
body.addElement("BPARAM1").addText("Body param 1");
body.addElement("BPARAM2").addText("Body param 2");
// 3.转换为字符集的xml
String xml = doc.asXML();
System.out.println("xml1:\n" + xml);
return xml;
}
/**
* 解析xml
*
* @param xml
* 字符串的xml参数
*/
public static void String2XML(String xml) {
System.out.println("============xml解析===============");
try {
// 转换
Document doc = DocumentHelper.parseText(xml);
// 获取节点内容
String headerParam1Text = doc.selectSingleNode("/ROOT/HEADER/HPARAM1").getText();
System.out.println("节点ROOT->HEADER->HPARAM1的值为:" + headerParam1Text);
@SuppressWarnings("unchecked")
List ns = doc.selectNodes("/ROOT/HEADER/field");
System.out.println("通过属性名称查询节点TEXT值:"+getTextByAttribute(ns,"name","F1"));
} catch (DocumentException e) {
System.out.println("转换异常:" + e.getMessage());
e.printStackTrace();
}
}
public static String getTextByAttribute(List nodes, String attributeName, String attributeValue) {
for (Element node : nodes) {
if (node.attributeValue(attributeName).equals(attributeValue)) {
return node.getText();
}
}
return null;
}
}