ruby 如何查看一个Nokogiri::XML::Node是否包含另一个Nokogiri::XML::Node的部分?

oogrdqng  于 2023-04-05  发布在  Ruby
关注(0)|答案(1)|浏览(99)

使用ruby Nokogiri,我有一个Nokogiri::XML::Node对象(ConstituencyXMLNode继承自Nokogiri::XML::Node),它是一个树对象,如下所示:

#(ConstituencyXMLNode:0xc3c8 {
  name = "PP",
  children = [
    #(ConstituencyXMLNode:0xc3dc { name = "IN", children = [ #(Text "out")] }),
    #(ConstituencyXMLNode:0xc3f0 {
      name = "PP",
      children = [
        #(ConstituencyXMLNode:0xc404 { name = "IN", children = [ #(Text "of")] }),
        #(ConstituencyXMLNode:0xc418 {
          name = "NP",
          children = [
            #(ConstituencyXMLNode:0xc42c { name = "JJ", children = [ #(Text "non-living")] }),
            #(ConstituencyXMLNode:0xc440 { name = "NNS", children = [ #(Text "resources")] })]
          })]
      })]
  })

我们称之为pp_leaf
我想比较一下这个节点的部分是否包含在另一个部分Nokogiri::XML::Node中:

#(ConstituencyXMLNode:0xc3f0 {
  name = "PP",
  children = [
    #(ConstituencyXMLNode:0xc404 { name = "IN", children = [ #(Text "of")] }),
    #(ConstituencyXMLNode:0xc418 {
      name = "NP",
      children = [
        #(ConstituencyXMLNode:0xc42c { name = "JJ", children = [ #(Text "non-living")] }),
        #(ConstituencyXMLNode:0xc440 { name = "NNS", children = [ #(Text "resources")] })]
      })]
  })

我们将这个节点称为current_leaf
看起来Nokogiri::XML::NodeSet有我正在寻找的比较工具,但我不确定如何将Nokogiri::XML::Node转换为Nokogiri::XML::NodeSet。如果一个集合包含另一个集合,Nokogiri::XML::Node上的运算符似乎都没有我需要匹配的比较运算符。
有什么想法吗

d8tt03nd

d8tt03nd1#

我找到了一种方法:

pp_leaf.xpath('.//*').include?(current_leaf)`

感谢this answer。它将节点树分解为一个数组,让您检查节点是否是成员。

相关问题