由于工作中经常涉及跨平台的数据交换,XML是不二选择。
虽然SOAP能让各种异构平台都使用自由对象,但是很难避免要手动处理通过纯文本传递过来的xml数据。XPath能让工作简单很多,这样一条xpath查询:
/*[local-name()='Root']/*[local-name()='Person']/*[local-name()='Name']
显然要比手动处理SAX流程或者dom tree要简单很多,况且现在jdom和dom4j都已经大量普及,他们对xpath的支持都还做的不错。
今天写了一段代码,利用一个xpath查询,在dom4j中处理一个极为简单的xml,本来打算几分钟脱手的,结果程序一直执行不正常,xpath始终无法找到节点,无论怎么查,都只能返回null或是size=0的List,程序也不报告任何异常,其不厚道者甚矣。一再确认xpath表达式、标签名、明明空间,却总是不得要领,郁闷,太过丢人。
无奈之下,只能怀疑部署环境有问题。程序是部署在Jboss 4.0.2下的一个很简单的war,打开jboss/lib,发现下面由一个dom4j,估计版本有点低,替换成dom4j 1.6.1,问题依旧,再郁闷。喝两口茶,突然想起dom4j的xpath api是依赖jaxen完成的,其功能本身和dom4j.jar没有什么关系,于是把jboss/lib下的jaxen.jar替换成dom4j 1.6.1的lib下的版本,try again,运行正常。
第一次使用搜狗输入法,发现很容易产生错别字。