【问题标题】:How can i find an element by xpath text() and the second cousin of this element?我如何通过 xpath text() 和该元素的第二个表亲找到一个元素?
【发布时间】:2014-07-23 11:09:29
【问题描述】:

我在 java 中使用 Htmlunit。我需要通过 text() 找到一个元素,并且我需要这个元素的第二个表弟(我认为)。

我试过了:

HtmlElement element = page.getFirstByXPath("//*[text() = \"SOMETHING\"]/parent/following-sibling/child");
System.out.println(element.asText()); // it's null

更新: html源码页面:

<tr>
    <script>
    _l('its not important')
    </script>
    <td valign="top">
        <font class="its not important">
    </td>
    <td valign="top">
        <font class="its not important">
            SOMETHING
            <script>
                _l('its not important')
            </script>
        </font>
        <script>
            _l('its not important')
        </script>
    </td>
</tr>
<tr>
    <td></td>
    <td valign="top">
        THE INFORMATION I NEED
    </td>
</tr>

【问题讨论】:

  • 顺便说一句,我喜欢你用的表亲这个词!实际上,在 XPath 中,您有父母、孩子和兄弟姐妹,但没有真正的表亲。但我真的很喜欢这句话,它很有意义:)
  • 我试着简单地问这个问题。我很高兴你喜欢它。 :)

标签: text xpath parent htmlunit nextsibling


【解决方案1】:

以下 XPath 应该可以工作:

//tr[td/*[contains(text(), "SOMETHING")]]/following-sibling::tr/td[@valign ="top"]

它将选择一个&lt;tr&gt; 元素,该元素确实有一个带有所需文本的孙子元素。然后它将选择所有后续兄弟并选择下一个元素。请注意,我根据 valign 属性值选择了正确的 &lt;td&gt; 元素 basec,您可能不想这样做,而是使用位置,即 td[2]

【讨论】:

    【解决方案2】:

    试试

    //*[text() = \"SOMETHING\"]/../following-sibling::*[1]/*[1]
    

    【讨论】:

    • 这对我不起作用。我用html更新了问题,请检查一下。谢谢!
    • 下一次,总是有一个输入 XML。我只是根据您的帖子标题进行的猜测。
    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多