0

如何使用 CSS 或 XPath 在下面的代码中获取文本“Next”的链接?

<div id="pagination">
    <a href="link">2</a>
    <a href="link">3</a>
    <a href="link">4</a>
    <a href="link">5</a>
    <a href="link">6</a>
    <a href="link">7</a>
    <a href="link">8</a>
    <a href="link">9</a>
    <a href="link">10</a>
    <a href="link">Next</a>
    <a href="link">Last</a>
</div>
4

4 回答 4

2

目前还不太清楚你想要什么。如果你想要第十个链接:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div id="pagination">
    <a href="link">2</a>
    <a href="link">3</a>
    <a href="link">4</a>
    <a href="link">5</a>
    <a href="link">6</a>
    <a href="link">7</a>
    <a href="link">8</a>
    <a href="link">9</a>
    <a href="link">10</a>
    <a href="link">Next</a>
    <a href="link">Last</a>
</div>
EOT

doc.search('a')[9]
=> #<Nokogiri::XML::Element:0x80763880 name="a" attributes=[#<Nokogiri::XML::Attr:0x80763498 name="href" value="link">] children=[#<Nokogiri::XML::Text:0x80762fd4 "Next">]>

或者:

doc.at('//a[9]')

如果您不知道它将是哪个元素编号,但要关闭文本并想使用 CSS,我会这样做:

doc.search('a').select{ |n| n.content == 'Next' }.first

不幸的是,CSS 不能搜索标签的文本,所以你必须有点创意。XPath 可以做到:

doc.at('//a[text()="Next"]')
于 2012-09-10T07:04:08.743 回答
1
path = "/a[.='Next']"

查询该路径,您将获得a带有“Next”的元素,因为它是text().

于 2012-09-10T07:01:49.430 回答
0

如果规则是a其字符串值是"Next"的最后一个孩子div,只需使用

//div[@id='pagination']/a[last()-1]

这里我们假设在divXML 文档中最多存在一个id属性值为 的"pagination"——这是对 XHTML 文档的合理假设。

基于 XSLT 的验证

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*">
     <xsl:copy-of select="//div[@id='pagination']/a[last()-1]"/>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时

<div id="pagination">
    <a href="link">2</a>
    <a href="link">3</a>
    <a href="link">4</a>
    <a href="link">5</a>
    <a href="link">6</a>
    <a href="link">7</a>
    <a href="link">8</a>
    <a href="link">9</a>
    <a href="link">10</a>
    <a href="link">Next</a>
    <a href="link">Last</a>
</div>

对 XPath 表达式求值,并将从该求值中选择的节点复制到输出:

<a href="link">Next</a>
于 2012-09-10T13:01:09.390 回答
0

实际上,也可以用 css 做到这一点:

 #pagination a:nth-last-child(2)

假设它总是倒数第二个,你可以使用 css 3 选择器

于 2012-09-10T22:16:22.327 回答