我正在尝试使用以下结构解析一些 HTML,如何使用 xpath提取<a>每个<li>元素的第一个元素?
<ul>
<li>
<a>
<span>
<a>
</li>
<li>
<a>
<span>
<a>
</li>
...
</ul>
Run Code Online (Sandbox Code Playgroud)
@Mathias:你说得对,我道歉。//li/a[1] 不起作用,因为它不是直系子节点(中间有一个文章标签,为了简单起见,我省略了它)。
然后让我将此作为解决方案发布,并提供更多解释。
如果正如您所描述的那样,//li/a[1]在返回时没有返回任何内容(//li//a)[1],那么您显示的 HTML 示例并不代表您的实际文档。然后,a将是 的后代li,但不是它的直接子代。
在这种情况下,正确的 XPath 表达式是
//li//a[1]
Run Code Online (Sandbox Code Playgroud)
但仅当嵌套级别不同时才使用它,即如果li和之间可以嵌套其他元素a:
<li>
<article>
<other>
<a/>
Run Code Online (Sandbox Code Playgroud)
如果嵌套是一致的,但它并不总是在article这两者之间元素li和a再利用
//li/*/a[1]
Run Code Online (Sandbox Code Playgroud)
这避免了在//计算上比 更昂贵的轴/。
最后,如果您知道a您感兴趣的li元素始终是元素的孙子元素,并且始终是article它们之间的元素,请使用
//li/article/a[1]
Run Code Online (Sandbox Code Playgroud)
当我将表达式更正为 //li/article/a[1]' 时,我得到第一个 li 的第一个 a`。
//li/article/a[1]如果有多个a元素是 的子元素article和孙元素,则返回多个结果li。如果这仅返回一个结果