java - dom4j 文本函数的 XPath 解析失败

标签 java xpath xml-parsing dom4j

我的输入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解析不正确的根本原因。文本值被分解为多个节点而不是单个节点。查看突出显示的图片

enter image description here

事实证明这是 dom4j 库中的一个错误,该库仍然处于打开状态

https://github.com/dom4j/dom4j/issues/21

修复方法是调用 document.normalize() 来设置文本节点。

关于java - dom4j 文本函数的 XPath 解析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58073073/

相关文章:

java - 在首选项中保存列表

javascript - 对存储在变量中的 xml 运行 Xpath(获取 "Uncaught TypeError: undefined is not a function")

python - 在 Python 中使用 ElementTree 解析 XML

java - 为什么 NodeList 不扩展 Collection 或 Iterable?

java - mongodb scala 驱动程序 casbah 是否自动管理连接池

java - 如何强制 ImageIcon 具有特定大小?

c# - 具有命名空间时使用 xpath 从 XML 获取值

python - 使用 xpath 访问元素?

java - 无法获取 xml 文件中名称为 ="debitRequest"的父节点的子节点名称

Java - 如何通过反射检查数组长度(类中的字段)