使用节点选择祖父母来选择其后代之一

发布于 2024-10-31 21:35:22 字数 314 浏览 0 评论 0原文

我有一个与此类似的树:

         tr
        _|_
       td  td
      _|    |_
     div     div
     _|       |_ 
 input       "foobar"

我使用以下方法选择了节点“foobar”:

//*[normalize-space(text())='foobar']

但我无法选择曾祖父母tr并用它选择曾孙input有什么建议吗?

I have a tree similar to this:

         tr
        _|_
       td  td
      _|    |_
     div     div
     _|       |_ 
 input       "foobar"

I have the node "foobar' selected using:

//*[normalize-space(text())='foobar']

But I am unable to select the great grandparent tr and select great grand child input with it. Any Suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光瘦了 2024-11-07 21:35:22

我选择了节点“foobar”
使用:

//*[标准化空间(text())='foobar'] 

但我无法选择伟大的
祖父母 tr 并选择曾祖父
子“foobar”与它。

我猜想您想要选择字符串值(规范化后)为“foobar”的元素,从顶部元素 tr 开始。

下面是一个从顶部元素 tr 开始并选择所需元素的 XPath 表达式:

/tr//*[normalize-space()='foobar']

如果您需要选择文本节点本身(而不是其元素父级):

/tr//text()[normalize-space()='foobar']

如果您想避免代价高昂的操作并且缓慢评估 // 缩写(因为您知道文档结构),请使用以下表达式:

/tr/td/div[normalize-space()='foobar']

甚至:

/tr/td[2]/div

更新

现在OP改变了他的问题并想要选择div 中具有规范化字符串值“foobar”的 input 元素。

这是一个精确选择此内容的 XPath 表达式

../..//input

../../td[1]/div/input

请注意:如果这些表达式未选择任何节点,则该文档很可能具有默认名称空间 - - 搜索 XPath 默认命名空间——这个问题有很多好的答案——在 SO 和互联网上。

I have the node "foobar' selected
using:

//*[normalize-space(text())='foobar'] 

But I am unable to select the great
grandparent tr and select great grand
child "foobar" with it.

I guess that you want to select the element whose string value (after normalization) is "foobar", starting from the top element tr.

Here is one XPath expression that "starts" from the top elemet tr and selects the wanted element:

/tr//*[normalize-space()='foobar']

If you need to select the text node itself (not its element parent):

/tr//text()[normalize-space()='foobar']

If you want to avoid the costly and slow evaluation of the // abbreviation (because you know the document structure), use this expression:

/tr/td/div[normalize-space()='foobar']

or even:

/tr/td[2]/div

Update:

Now the OP changed his question and wants to select the input element from the div that has normalized string-value 'foobar'.

Here is an XPath expression selecting exactly this:

../..//input

or

../../td[1]/div/input

Do note: In case these expressions don't select any node, it is most likely that the document has a default namespace -- search for XPath default namespace -- there are many good answers to this problem -- here at SO and on the internet.

十年九夏 2024-11-07 21:35:22

此 XPath 表达式选择在空格规范化后具有等于“foobar”的后代文本节点的每个元素

//*[.//text()[normalize-space()='foobar']]

This XPath expression select every element having a descendant text node equal to "foobar" after whitespace normalization:

//*[.//text()[normalize-space()='foobar']]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文