使用 local-name() 从命名空间 XML 到 select 值的 XPath?

XPath to select value from namespaced XML using local-name()?

如何提取/substance/text/makers/text的值?

我期待结果

  1. 自动化
  2. 测试记录

我试过很多东西,例如:

<health xmlns="http://test.com/sample">
    <substance>
        <name>substance</name>
        <text value="Automation"/>
    </substance>
    <user>
        <reference value="User/111111122"/>
    </user>
    <reaction>
        <makers>
            <name>makers</name>
            <text value="Test Record"/>
        </makers>
    </reaction>
</health>

这个 XPath,

//*[local-name()='text']/@value

将 select 文档中所有 text 元素的所有 value 属性,无论命名空间如何。

请注意,考虑命名空间比以这种方式打败它们要好。参见


不工作?

提供的 XPath select 两个 @value 属性。如果您只看到一个,可能是因为您将结果传递给了一个 XPath 1.0 函数,该函数需要一个值,并且在传递多个值时被定义为 select 节点集的第一个成员。参见 Why does XPath expression only select text of first element?


还是不行?

这里有两个选项 select 单独而不是集体地输入值:

  1. (//*[local-name()='text']/@value)[1]
    (//*[local-name()='text']/@value)[2]

  2. //*[local-name()='substance']/*[local-name()='text']/@value
    //*[local-name()='makers']/*[local-name()='text']/@value