如何使用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>
答案 0 :(得分: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"]')
答案 1 :(得分:1)
path = "/a[.='Next']"
对该路径进行查询,您将获得带有“下一步”的a
元素,因为它是text()
。
答案 2 :(得分:0)
如果规则是a
,其字符串值为"Next"
是div
的最后一个孩子,请使用:
//div[@id='pagination']/a[last()-1]
在这里,我们假设XML文档中至多存在一个div
,其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>
答案 3 :(得分:0)
实际上,也可以使用css执行此操作:
#pagination a:nth-last-child(2)
假设它总是最后一个,你可以使用css 3选择器