[英]How to check if a particular node is present in XML in Ruby
我想检查某个节点下是否存在某个节点,该节点可以存在于任何级别。 (可能更深)。
对于此XML:
<main>
<sub>
<inner>
<first></first>
<second></second>
</inner>
</sub>
</main>
如何使用Nokogiri而不直接使用XPath '/sub/inner'
来检查sub
节点是否first
具有内部节点?
除非您知道sub
节点位于顶层,否则XPath是不正确的。 将XPath选择器视为操作系统中的路径。 /sub
将位于驱动器的根目录。
我建议您使用CSS选择器进行说明:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<main>
<sub>
<inner>
<first>first_text</first>
<second></second>
</inner>
</sub>
</main>
EOT
doc.at('sub first').text # => "first_text"
'sub first'
意味着first
必须存在于'sub'
下'sub'
某个地方。
这可能会有所帮助:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<main>
<sub>
<inner>
<first>first_text</first>
<second></second>
</inner>
</sub>
</main>
EOT
doc.at('/sub/first') # => nil
doc.at('sub first') # => #<Nokogiri::XML::Element:0x3fd580c9e54c name="first" children=[#<Nokogiri::XML::Text:0x3fd580c9e2f4 "first_text">]>
doc.at('//sub/*/first') # => #<Nokogiri::XML::Element:0x3fd580c9e54c name="first" children=[#<Nokogiri::XML::Text:0x3fd580c9e2f4 "first_text">]>
doc.at('//sub//first') # => #<Nokogiri::XML::Element:0x3fd580c9e54c name="first" children=[#<Nokogiri::XML::Text:0x3fd580c9e2f4 "first_text">]>
doc.at('sub first').text # => "first_text"
doc.at('//sub/*/first').text # => "first_text"
doc.at('//sub//first').text # => "first_text"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.