Ruby 使用CSS或XPath按内容选择元素
如何使用CSS或XPath获取下面代码中与文本的链接Ruby 使用CSS或XPath按内容选择元素,ruby,xpath,css-selectors,capybara,Ruby,Xpath,Css Selectors,Capybara,如何使用CSS或XPath获取下面代码中与文本的链接 <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
<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>
如果查询该路径,您将得到一个文本为“Next”的元素
如果查询该路径,您将得到一个文本为“Next”的元素。不太清楚您想要什么。如果您想要第十个链接:
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">]>
如果您不知道它将是哪个元素号,但正在键入文本并希望使用CSS,我会:
doc.search('a').select{ |n| n.content == 'Next' }.first
不幸的是,CSS不能搜索标签的文本,所以你必须有点创造性。XPath可以做到这一点:
doc.at('//a[text()="Next"]')
你想要什么还不太清楚。如果您想要第十个链接:
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">]>
如果您不知道它将是哪个元素号,但正在键入文本并希望使用CSS,我会:
doc.search('a').select{ |n| n.content == 'Next' }.first
不幸的是,CSS不能搜索标签的文本,所以你必须有点创造性。XPath可以做到这一点:
doc.at('//a[text()="Next"]')
如果规则是字符串值为Next的a是div的最后一个子级,则只需使用:
在这里,我们假设XML文档中最多存在一个div,其id属性具有分页的值——这对于XHTML文档来说是一个合理的假设
基于XSLT的验证:
在提供的XML文档上应用此转换时:
将计算XPath表达式,并将此计算中选定的节点复制到输出:
如果规则是字符串值为Next的a是div的最后一个子级,则只需使用:
在这里,我们假设XML文档中最多存在一个div,其id属性具有分页的值——这对于XHTML文档来说是一个合理的假设
基于XSLT的验证:
在提供的XML文档上应用此转换时:
将计算XPath表达式,并将此计算中选定的节点复制到输出:
实际上,使用css也可以做到这一点:
#pagination a:nth-last-child(2)
假设它总是倒数第二个,并且您可以使用css 3选择器,实际上,也可以使用css执行此操作:
#pagination a:nth-last-child(2)
假设它总是倒数第二,你可以使用css 3选择器你不能使用jquery或css is must吗?我认为使用css是不可能的。它必须是css或XPath,因为Capybara只支持它们。你不能使用jquery或css is must吗?我认为使用css是不可能的。它必须是css或XPath,因为Capybara只支持它们。我不知道标记的位置,因为它发生了变化所以,第二个和第三个解决方案是好的。我不知道标签的位置,因为它改变了,所以,第二个和第三个解决方案是好的。你能解释一下它的含义吗。在这里为什么不/a[text='Next'当然你也可以这样做。如果我没有错的话,基本上是指当前节点。我记得。从前面开始,所以现在不能确定它是什么。你能解释一下它的含义吗。在这里?为什么不/a[text='Next'当然你也可以这样做!如果我没有错的话,基本上是指当前节点。我记得。从前面开始,所以现在无法确定它是什么。
<a href="link">Next</a>
#pagination a:nth-last-child(2)