配置開發(fā)包
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar(XPath必備)
取某一節(jié)點(diǎn)
Element root = (Element) document.selectSingleNode("http://root");
取某一節(jié)點(diǎn)的屬性
Attribute attribute = (Attribute) document.selectSingleNode("http://root/cell/@value");
使用經(jīng)驗(yàn)
我們?cè)谧鱿到y(tǒng)間交互時(shí),通常通過自定義的xml文件進(jìn)行數(shù)據(jù)交換。例如:系統(tǒng)A需要向系統(tǒng)B傳輸一個(gè)xml字串的條件如下:
<?xml version="1.0" encoding="gb2312"?> <root systemid="Darenkou" userid="admin" default="DA" icon="0000"> <cell value=""/> </root> |
系統(tǒng)A只需填充cell節(jié)點(diǎn)的value屬性值,我的建議是將這段xml寫成本地文件,每次傳輸時(shí)首先讀取xml文件,再置cell節(jié)點(diǎn)的value屬性值,然后將xml對(duì)象轉(zhuǎn)變成字串傳給系統(tǒng)B。這樣的優(yōu)點(diǎn)是:一般systemid="Darenkou" userid="admin" default="DA" icon="0000" 是傳輸參數(shù),當(dāng)有所變動(dòng)時(shí)只需修改本地文件即可。
詳細(xì)例程
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", "數(shù)值") .addAttribute("name", "人數(shù)").addText(value); } strXml = encodeXml(document, "gb2312"); } return strXml; } private static String encodeXml(Document document, String aEncode) { // 進(jìn)行編碼轉(zhuǎ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)); } } |