1. 概述
dom4j 是 dom4j.org 出品的一个开源XML解析包,应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。如今可以看到越来越多的Java软件都在使用 dom4j 来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。
点击 dom4j 下载不同版本的 jar 包,下载后,添加到eclipse的build path中,即可使用。
2. 简单示例
2.1. 目标xml字符串
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<platform>
<type name="iOS">
<language>swift</language>
<company>apple</company>
</type>
<type name="Android">
<language>java</language>
<company>google</company>
</type>
</platform>
</root>
2.2. 代码
public static String genXmlStr(){
Document doc = DocumentHelper.createDocument();
Element rootEle = doc.addElement("root");
Element platformEle = rootEle.addElement("platform");
Element typeEle = platformEle.addElement("type");
typeEle.addAttribute("name", "iOS");
Element languageEle = typeEle.addElement("language");
languageEle.setText("swift");
Element companyEle = typeEle.addElement("company");
companyEle.setText("apple");
typeEle = platformEle.addElement("type");
typeEle.addAttribute("name", "Android");
languageEle = typeEle.addElement("language");
languageEle.setText("java");
companyEle = typeEle.addElement("company");
companyEle.setText("google");
OutputFormat format = OutputFormat.createCompactFormat();
StringWriter writer = new StringWriter();
XMLWriter output = new XMLWriter(writer, format);
try {
output.write(doc);
writer.close();
output.close();
System.out.println(writer.toString());
} catch (IOException e) {
e.printStackTrace();
return null;
}
return writer.toString();
}
通过以上代码,即可生成2.1节目标字符串。
3. 实战示例
在实际项目中,目标xml字符串不会如此简单。我们打开网上的一个
WebService 示例:WeatherWebService ,可以看到其暴露了5个接口,打开接口 getWeatherbyCityNamePro(),可以看到调用该接口所需要的soap12请求示例,如下图所示:
要想调用getWeatherByCityNamePro()接口,要生成下节所示的xml字符串作为post的请求参数。
3.1.目标xml字符串
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<getWeatherbyCityNamePro xmlns="http://WebXml.com.cn/">
<theCityName>Nanjing</theCityName>
<theUserID>025</theUserID>
</getWeatherbyCityNamePro>
</soap12:Body>
</soap12:Envelope>
3.2. 代码
public static String genLoginRequestStr1(String accountType, String phoneNum, String password, String openId,
String wxoaOpenid) {
// 第一种方法 上文中已使用过
// Document doc = DocumentHelper.createDocument();
// Element root = doc.addElement("soap12:Envelope");
// 还可以使用第二种方法
Element root = DocumentHelper.createElement("soap12:Envelope");
Document doc = DocumentHelper.createDocument(root);
root.addAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
root.addAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
root.addAttribute("xmlns:soap12", "http://www.w3.org/2003/05/soap-envelope");
Element bodyEle = DocumentHelper.createElement("soap12:Body");
root.add(bodyEle );
Element methodEle = bodyEle .addElement("getWeatherbyCityNamePro", "http://WebXml.com.cn/");// 接口名称 命名空间
Element cityEle= methodEle .addElement("theCityName");
cityEle.setText("Nanjing");
Element userEle= methodEle .addElement("theUserID");
userEle.setText("025");
OutputFormat format = OutputFormat.createCompactFormat();// createPrettyPrint() 层次格式化
StringWriter writer = new StringWriter();
XMLWriter output = new XMLWriter(writer, format);
try {
output.write(doc);
writer.close();
output.close();
System.out.println("requestXml: " + writer.toString());
} catch (IOException e) {
e.printStackTrace();
return null;
}
return writer.toString();
}
通过以上代码,即可生成3.1节目标字符串。
网友评论