Dom4j解析XML

xml文件根元素中如果有命名空间的定义时,使用dom4j解析xml有问题,去掉命名空间的定义,就不会出问题.解决办法见详细内容说明......希望对有同样问题的朋友有所帮助.[@more@]

xml文件例子

<?xml version="1.0" encoding="UTF-8"?>
http://www.bocsoft.com/OnlineTran" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bocsoft.com/OnlineTran
OnlineTranSchema.xsd">

BA050004
合同账户列表查询


16
numeric
M
合同号码


1
alphanumeric
M
功能码



如果其中含有命名空间定义的,解析xml代码如下:

HashMap xmlMap = new HashMap();
String defaultNS = "http://www.bocsoft.com/OnlineTran";
xmlMap.put("x", defaultNS);
XPath x = document.createXPath("//x:OnlineTran/x:Trade/x:Input/x:InputTranData");
x.setNamespaceURIs(xmlMap);
List lt = x.selectNodes(document);

可以参考的api说明页面链接及例子代码如下:http://www.dev2dev.cn/javadocs/dom4j161/apidocs/org/dom4j/XPath.html

Map uris = new HashMap();
uris.put("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/");
uris.put("m", "urn:xmethodsBabelFish");
XPath xpath = document
.createXPath("SOAP-ENV:Envelope/SOAP-ENV:Body/m:BabelFish");
xpath.setNamespaceURIs(uris);
Node babelfish = xpath.selectSingleNode(document);

如果没有命名空间的定义,解析xml代码如下:

List attList = document.selectNodes("//OnlineTran/Trade/Input/InputTranData");

使用Dom4j解析xml时的一些常见问题:

1. 写入 Xml 文件的时候默认是全部内容写为一行,这个可以通过加入 Format 来解决:
OutputFormat format = OutputFormat.createPrettyPrint();

2. Xml 中文问题
2.1 Xml 最好设为 utf-8 格式,为什么不设成 gbk,我以前 blog 写过的:
format.setEncoding("utf-8");

2.2 不要用 FileWriter 输出双字节,改为 FileOutputStream 输出单字节:
XMLWriter output = new XMLWriter(new FileOutputStream(configFile), format);

3. CDATA类型文本输入问题
Element conTblOpr = rowElement.addElement(XmlDBConstants.CON_TBL_OPR);// 加入节点
DefaultCDATA conTblOprCdata = new DefaultCDATA(conTblOprField);// CDATA格式化
conTblOpr.add(conTblOprCdata );// 加入CDATA文本
Dom4j 里面已经内置了对 CDATA 类型文本的支持,不要硬编码去在文本两边加。


XPath教程
http://www.zvon.org/xxl/XPathTutorial/General/examples.html

dom4j使用心得
http://blog.csdn.net/jgsfy/archive/2005/10/25/516026.aspx

DOM4J对XML文档的读写增删改等
http://www.zhuoda.org/weiking/54385.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/63654/viewspace-900646/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/63654/viewspace-900646/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值