XPath 返回 XHTML 文件中的第一个 <a></a> 标记

XPath return first <a></a> tags within a XHTML file

提问人:J. Holub 提问时间:1/4/2018 更新时间:1/5/2018 访问量:152

问:

我是xpath的新手,对它了解不多。我知道有一种方法可以使用 xpath 在 xml / xhtml 文件中查找特定标签。就我而言,我正在尝试找到第一个 (a) 链接元素。不幸的是,我的 xpath String [//a[1]/text()] 返回所有 (a) 链接标签,而不是第一个

XPATH: //a[1]/text()

Text='Fachliche Expertise'
Text='Zielerreichung'
Text='Gesamtbeurteilung Leistung'

Expected:

Text='Fachliche Expertise'

这是 xhtml 代码:

<ul class="nav nav-tabs">
    <li class="nav-item">
        <a class="nav-link active null" data-toggle="tab" data-target="#group2">Fachliche Expertise</a>
    </li>
        <li class="nav-item">
        <a class="nav-link  null" data-toggle="tab" data-target="#group1">Zielerreichung</a>
    </li>
    <li class="nav-item">           
        <a class="nav-link  null" data-toggle="tab" data-target="#group7">Gesamtbeurteilung Leistung</a>
    </li>
</ul>
XPath XHTML的

评论


答:

2赞 Tim Biegeleisen 1/4/2018 #1

请尝试以下 XPath 表达式:

/ul/li[1]/a/text()

由于 HTML 的结构似乎是已知的,因此我们可以导航到第一个元素,然后从锚标记中选择文本。<li>

评论

0赞 kjhughes 1/5/2018
这个答案在技术上是正确的 (+1),但更通用的 XPath 会更健壮,涵盖任何文档结构。
0赞 Sunil 1/4/2018 #2

使用此 Xpath:

//a/text()[1]

这将仅选择第一个节点。

评论

0赞 kjhughes 1/5/2018
-1:这个答案是错误的,投赞成票的人没有注意。 将选择所有元素中的第一个文本节点。//a/text()[1]a
0赞 kjhughes 1/5/2018
换言之,它选择 、 和 。Fachliche ExpertiseZielerreichungGesamtbeurteilung Leistung
2赞 kjhughes 1/4/2018 #3

提供的其他答案的问题

  • /ul/li[1]/a/text()在技术上是正确的,但不是通用的 - 它是给定的 XHTML 结构所特有的,并且 不会在 XHTML 文件中提供 first <a></a> 标记,每个 标题请求。
  • //a/text()[1]只是错了。它将选择第一个文本节点 在所有元素中。a

正确答案

这个 XPath,

(//a)[1]

将选择文档中的第一个元素,而不考虑结构。然后可以通过此 XPath 选择文本节点子节点,a

(//a)[1]/text()

评论

1赞 Tim Biegeleisen 1/5/2018
好的,但也许 OP 打算找到第一个标签,相对于它在 HTML 结构中的位置。<a>
0赞 kjhughes 1/5/2018
@TimBiegeleisen:是的,我承认你的XPath对于给定的XHTML结构是好的,但是无数的变化(例如将第一个包装在)会导致你的XPath失败,而无论结构如何,都会满足第一个的请求。aspan(//a)[1]a