使用dom4j和XPath
配置開(kāi)發(fā)包
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar(XPath必備)
取某一節點(diǎn)
Element root = (Element) document.selectSingleNode("http://root");
取某一節點(diǎn)的屬性
Attribute attribute = (Attribute) document.selectSingleNode("http://root/cell/@value");
使用經(jīng)驗
我們在做系統間交互時(shí),通常通過(guò)自定義的xml文件進(jìn)行數據交換。例如:系統A需要向系統B傳輸一個(gè)xml字串的條件如下:
<?xml version="1.0" encoding="gb2312"?>
<root systemid="Darenkou" userid="admin" default="DA" icon="0000">
<cell value=""/>
</root>
系統A只需填充cell節點(diǎn)的value屬性值,我的建議是將這段xml寫(xiě)成本地文件,每次傳輸時(shí)首先讀取xml文件,再置cell節點(diǎn)的value屬性值,然后將xml對象轉變成字串傳給系統B。這樣的優(yōu)點(diǎn)是:一般systemid="Darenkou" userid="admin" default="DA" icon="0000" 是傳輸參數,當有所變動(dòng)時(shí)只需修改本地文件即可。
詳細例程
test.xml
<?xml version="1.0" encoding="gb2312"?>
<root id="TK12" name="管理員" value=""/>
XmlTest.java
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XmlTest {
public static String generateXml(HashMap map) {
String strXml = null;
if (map != null) {
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(new File("D:/test.xml"));
} catch (DocumentException e) {
e.printStackTrace();
}
Element root = (Element) document.selectSingleNode("http://root");
root.attribute("value").setValue("分布");
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
String key = (String) iter.next();
String value = (String) map.get(key);
Element element = root.addElement("cell").addAttribute("value",
key);
element.addElement("element").addAttribute("type", "數值")
.addAttribute("name", "人數").addText(value);
}
strXml = encodeXml(document, "gb2312");
}
return strXml;
}
private static String encodeXml(Document document, String aEncode) {
// 進(jìn)行編碼轉換
StringWriter sw = new StringWriter();
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(aEncode);
try {
XMLWriter writer = new XMLWriter(format);
writer.setWriter(sw);
writer.write(document);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sw.toString();
}
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("上海", "200");
map.put("北京", "300");
map.put("天津", "300");
System.out.println(generateXml(map));
}
}
聯(lián)系客服