繁体   English   中英

如何检查Ruby中XML中是否存在特定节点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM