【问题标题】:XPath find a child node of a node with partial stringsXPath 查找具有部分字符串的节点的子节点
【发布时间】:2018-02-03 12:09:22
【问题描述】:

我正在通过 npm 使用 xpath,并且正在搜索 XPath 1.0 表达式,这样在“name”和“run”之后的搜索应该会产生以下输出。

使用 "//*[contains(name(), 'name')]" 找到第一个“父节点”已经​​可以了,但我不知道是否可以通过部分名称找到子节点(以下任意数量的级别)?

输入:

<root>
    <NameX>
       <getLenght>
         <unit>m</unit>
       </getLenght>
       <getStatus>
         <status>0</status>
       </getStatus>
   </NameX>
   <Name2>
       <getStatus>
         <status>0</status>
       </getStatus>
       <running>
         <bit>true</bit>
       </running>
   </Name2>
</root>

输出:

<running>
    <bit>true</bit>
</running>

【问题讨论】:

  • 你试过//*[contains(name(), 'name')]//*[contains(name(), 'run')]吗?
  • 我不确定我是否已经尝试过他的 - 我会在星期一看看,谢谢。
  • 您能说明一下您希望 XPath 做什么吗?
  • @Andersson 我想在树中搜索,结果我想在 HTML 中创建一个树结构,其中找到的值显示为打开/突出显示。因此,我希望能够搜索包含“name”的父节点和包含“run”或“getStatus”的子节点,因此输出应为:'00true'
  • 还是一头雾水……要根据子节点获取父节点吗?类似//*[contains(name(), 'name') and .//*[contains(name(), 'run')]]?

标签: javascript xpath


【解决方案1】:

安德森的回答是正确的:

//*[contains(name(), 'name')]//*[contains(name(), 'run')]

高级示例:

如果您想搜索至少有一个子元素的父节点“名称”,例如'getLen' 或 getStat',那么你可以使用这个查询:

//*[contains(name(), 'Name')]//*[contains(name(), 'getLen') or 
contains(name(), 'getStat')]`

输出:

<NameX>
    <getLenght>
        <unit>m</unit>
    </getLenght>
    <getStatus>
        <status>0</status>
    </getStatus>
</NameX>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多