Ruby 是否在节点中获取特定标记?
我正在使用Ruby、XPath和Nokogiri,并试图从以下XML中检索Ruby 是否在节点中获取特定标记?,ruby,xml,xpath,nokogiri,Ruby,Xml,Xpath,Nokogiri,我正在使用Ruby、XPath和Nokogiri,并试图从以下XML中检索d1: <a> <b1> <c> <d1>01/11/2001</d1> <d2>02/02/2004</d2> </c> </b1> </a> 它不返回任何内容(无错误) 我想在中获取文本您不需要在xpath查询中请求文本内容: rs = doc.xpa
d1
:
<a>
<b1>
<c>
<d1>01/11/2001</d1>
<d2>02/02/2004</d2>
</c>
</b1>
</a>
它不返回任何内容(无错误)
我想在
中获取文本您不需要在xpath查询中请求文本内容:
rs = doc.xpath('//a/b1/c/d1/text()')
您不会在xpath查询中要求文本内容:
rs = doc.xpath('//a/b1/c/d1/text()')
您误用了XPath:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<a>
<b1>
<c>
<d1>01/11/2001</d1>
<d2>02/02/2004</d2>
</c>
</b1>
</a>
EOT
doc.at('/a/b1/c/d1').text # => "01/11/2001"
doc.at('//d1').text # => "01/11/2001"
看下面几行。我没有使用XPath选择器,而是使用了CSS,它更易于阅读。Nokogiri支持这两种观点
doc.at('d1').text # => "01/11/2001"
doc.at('a b1 c d1').text # => "01/11/2001"
另外,请注意从这两行返回的数据类型:
doc.at('/a/b1/c/d1/text()').class # => Nokogiri::XML::Text
doc.at('/a/b1/c/d1').text.class # => String
<> p>虽然告诉解析器在代码< >代码>内查找“代码>文本())/代码>节点,返回的不是文本,并且需要进一步访问以使其可用,所以请考虑放弃使用“代码>文本())<代码>,除非您确切地知道为什么需要它:
doc.at('/a/b1/c/d1/text()').text # => "01/11/2001"
最后,Nokogiri有许多用于定位节点的方法。如上所述,xpath
返回节点集,at
返回节点xpath
实际上是Nokogiri的search
方法的一个特定于xpath的版本search
、css
和xpath
都返回节点集at
,at_css
和at_xpath
所有返回节点。当您有一个不明确的选择器需要专门用作CSS或XPath时,CSS和XPath变体非常有用。大多数情况下,Nokogiri可以自己判断它是CSS还是XPath,并且会做正确的事情,因此在大多数编码中使用通用的search
和at
。当必须指定其中一个时,请使用特定版本。您误用了XPath:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<a>
<b1>
<c>
<d1>01/11/2001</d1>
<d2>02/02/2004</d2>
</c>
</b1>
</a>
EOT
doc.at('/a/b1/c/d1').text # => "01/11/2001"
doc.at('//d1').text # => "01/11/2001"
看下面几行。我没有使用XPath选择器,而是使用了CSS,它更易于阅读。Nokogiri支持这两种观点
doc.at('d1').text # => "01/11/2001"
doc.at('a b1 c d1').text # => "01/11/2001"
另外,请注意从这两行返回的数据类型:
doc.at('/a/b1/c/d1/text()').class # => Nokogiri::XML::Text
doc.at('/a/b1/c/d1').text.class # => String
<> p>虽然告诉解析器在代码< >代码>内查找“代码>文本())/代码>节点,返回的不是文本,并且需要进一步访问以使其可用,所以请考虑放弃使用“代码>文本())<代码>,除非您确切地知道为什么需要它:
doc.at('/a/b1/c/d1/text()').text # => "01/11/2001"
最后,Nokogiri有许多用于定位节点的方法。如上所述,
xpath
返回节点集,at
返回节点xpath
实际上是Nokogiri的search
方法的一个特定于xpath的版本search
、css
和xpath
都返回节点集at
,at_css
和at_xpath
所有返回节点。当您有一个不明确的选择器需要专门用作CSS或XPath时,CSS和XPath变体非常有用。大多数情况下,Nokogiri可以自己判断它是CSS还是XPath,并且会做正确的事情,因此在大多数编码中使用通用的search
和at
。当您必须指定一个或另一个时,请使用特定版本。您的问题是什么?在节点中获取特定标记?如何读取文档您的问题是什么?在节点中获取特定标记?如何读取文档text()
不返回文本。它返回一个Nokogiri::XML::Text节点:doc.xpath(“//a/b1/c/d1/Text()”)#=>[#]
。要获取内部文本,您仍然必须使用访问器,如text
:doc.xpath('//a/b1/c/d1/text()).text
或To_s
:doc.xpath('//a/b1/c/d1/text())。To_s=>“01/11/2001”
。另外,xpath
返回一个节点集,因此理论上会返回一个节点数组,这不是OP想要的。您不应该在根节点上使用/
。text()
不返回文本。它返回一个Nokogiri::XML::Text节点:doc.xpath(“//a/b1/c/d1/Text()”)#=>[#]
。要获取内部文本,您仍然必须使用访问器,如text
:doc.xpath('//a/b1/c/d1/text()).text
或To_s
:doc.xpath('//a/b1/c/d1/text())。To_s=>“01/11/2001”
。另外,xpath
返回一个节点集,因此理论上会返回一个节点数组,这不是OP想要的。您不应该在根节点上使用/
。