内容简介:虽然网上有很多类似的文章,可都描述的不是特别清楚且都是很老的文章了,让人走很多弯路,这里完整记录下。网上大多数分析的帖子都说dom4j解析xml性能最好,所以在碰到实际业务场景中就着手使用dom4j来解析xml了。在业务场景中解析xml基本上两种,一种是配置,另一种是调用外部项目接口反馈的xml。前者这里不多说,自己的配置随心所欲,通常xml的结构也相对比较简单。而后者就比较糟心了,比如我遇到的,一边接对应的接口一边不停的吐槽,泪崩中啊。
虽然网上有很多类似的文章,可都描述的不是特别清楚且都是很老的文章了,让人走很多弯路,这里完整记录下。
说在前面
网上大多数分析的帖子都说dom4j解析xml性能最好,所以在碰到实际业务场景中就着手使用dom4j来解析xml了。
在业务场景中解析xml基本上两种,一种是配置,另一种是调用外部项目接口反馈的xml。前者这里不多说,自己的配置随心所欲,通常xml的结构也相对比较简单。而后者就比较糟心了,比如我遇到的,一边接对应的接口一边不停的吐槽,泪崩中啊。
至于dom4j如何使用和一些基本概念,这里就不过多描述,网上随便一搜就是一大堆。
这里主要说下解析含有命名空间的XML。
具体实现
先看要我要解析的XML格式,如下截图,其实也不是很复杂:
在了解完dom4j基本概念之后,我就开始着手开发了,发现在获取完根节点之后,我需要递归几次才能获取我需要的 record 这个节点,显然比较麻烦。
于是继续google发现可以使用 selectNode(xpath) 的方式来直接获取,这个才是我想要的。
原以为几行代码轻松搞定,可最后发现 selectNode 始终获取不到对应的节点,起初还以为是我的路径有问题,后来才知道dom4j不能识别带命名空间的节点,所以在读取带命名空间的XML时,要在每个节点前加上命名空间。
好吧,我只想安安静静地解析个XML,居然这么绕,顿时心里又在吐槽这个接口本身了,非要用什么webservice返回个xml,http+json多好呀。
吐槽归吐槽,接还是得接啊,网上找些资料之后也大致明白,只要在节点前加上命名空间即可。
可好事多磨啊,我接的那个接口居然有两个命名空间, soapenv 和 response 两个节点上都有,好吧,我忍。
大体思路就是,先获取根节点,取到对应的命名空间,然后selectSingleNode到 response 这个节点取第二个命名空间,最后再组装xpath取到自己想要的节点。核心代码如下:
Document doc = XmlUtil.strToDocument(responseStr);
Map map = new HashMap();
// 获得命名空间
String firstUrl = doc.getRootElement().getNamespaceURI();
map.put("firstUrl", firstUrl);
XPath x = doc.createXPath("//firstUrl:Body");
x.setNamespaceURIs(map);
//获取第二层xml的命名空间
String secendUrl = ((Element) x.selectSingleNode(doc)).element("response").getNamespaceURI();
map.put("secendUrl", secendUrl);
x = doc.createXPath("//firstUrl:Body/secendUrl:response/"
+ "secendUrl:responseBody/secendUrl:records/secendUrl:record");
x.setNamespaceURIs(map);
List<Element> nodes = x.selectNodes(doc);
说在后面
在开发一段时间的 java 之后,突然开始怀念起 .net了,尤其在处理一些细节方面的时候,总感觉java有点啰嗦,明明可以一行代码搞定的事情,需要写个三四行。
java10终于支持var关键字了,java11要开始收费了,不懂是福还是祸啊~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- [译] React v16.8: 含有Hooks的版本
- VC++ 工程中含有同名源代码文件导致的坑
- UITableViewCell含有WebView的自适应高度新解决方案
- 如何用Jackson解析含有转义字符的JSON到Java对象?
- linux查找目录下的所有文件中是否含有某个字符串
- Website Planet实测:5个热门网站代管平台皆含有安全漏洞
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript & jQuery
David Sawyer McFarland / O Reilly / 2011-10-28 / USD 39.99
You don't need programming experience to add interactive and visual effects to your web pages with JavaScript. This Missing Manual shows you how the jQuery library makes JavaScript programming fun, ea......一起来看看 《JavaScript & jQuery》 这本书的介绍吧!
SHA 加密
SHA 加密工具
Markdown 在线编辑器
Markdown 在线编辑器