配置開發包
dom4j-1.6.1.jar
jaxen-1.1-beta-6.jar(XPath必備)
取某一節點
Element root = (Element) document.selectSingleNode("http://root");
取某一節點的屬性
Attribute attribute = (Attribute) document.selectSingleNode("http://root/cell/@value");
使用經驗
我們在做系統間交互時,通常通過自定義的xml文件進行數據交換。例如:系統A需要向系統B傳輸一個xml字串的條件如下:
<?xml version="1.0" encoding="gb2312"?> <root systemid="Darenkou" userid="admin" default="DA" icon="0000"> <cell value=""/> </root> |
系統A只需填充cell節點的value屬性值,我的建議是將這段xml寫成本地文件,每次傳輸時首先讀取xml文件,再置cell節點的value屬性值,然后將xml對象轉變成字串傳給系統B。這樣的優點是:一般systemid="Darenkou" userid="admin" default="DA" icon="0000" 是傳輸參數,當有所變動時只需修改本地文件即可。
詳細例程
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) { // 進行編碼轉換 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)); } } |