我的输入xml是
String xml= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<disks-array>\n" +
"<array-item>\n" +
" <value>\n" +
"<scsi>\n" +
"<bus>0</bus>\n" +
"<unit>0</unit>\n" +
"</scsi>\n" +
"<backing>\n" +
"<vmdk_file>[909_TCUP_02] u999orcat017t/u999orcat017t.vmdk</vmdk_file>\n" +
"<type>VMDK_FILE</type>\n" +
"</backing>\n" +
"<label>Hard disk 1</label>\n" +
"<type>SCSI</type>\n" +
"<capacity>107374182400</capacity>\n" +
"</value>\n" +
"<key>2000</key>\n" +
"</array-item>\n" +
"</disks-array>"
XPath 过滤器是
"//array-item[contains(./value/backing/vmdk_file/text(),'u999orcat017t/u999orcat017t.vmdk')]"
这是我的解析和过滤代码
Document doc = DocumentHelper.parseText(xml);
XPath xp = DocumentHelper.createXPath(xpathQuery);
// evaluate the xpath
Object xpResult = xp.evaluate(doc);
理想情况下,它应该返回包含给定文本的数组项/value/vmdk_file 文本。然而它给了我空字符串。
我使用的是 dom4j 1.61 和 jaxen 1.1.1 版本库。
出了什么问题?
最佳答案
经过几个小时的调试,终于找出了xml解析不正确的根本原因。文本值被分解为多个节点而不是单个节点。查看突出显示的图片
事实证明这是 dom4j 库中的一个错误,该库仍然处于打开状态
https://github.com/dom4j/dom4j/issues/21
修复方法是调用 document.normalize() 来设置文本节点。
关于java - dom4j 文本函数的 XPath 解析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58073073/