如何只选择包含nokogiri某些子元素的段落?

时间:2016-12-19 07:47:53

标签: ruby nokogiri

我有以下XML:

<w:p w14:paraId="07E73137" w14:textId="77777777" w:rsidP="00D279DF" w:rsidR="00D279DF" w:rsidRDefault="00D279DF">
</w:p>
<w:p w14:paraId="07E73138" w14:textId="77777777" w:rsidP="00D279DF" w:rsidR="00D279DF" w:rsidRDefault="00D279DF>
    <w:r w:rsidRPr="00922473">
      <w:t xml:space="preserve">Visual attributes </w:t>
    </w:r>
    <w:ins w:author="RKH RKH" w:date="2016-12-17T16:40:00Z" w:id="0">
        <w:r>
            <w:t>an</w:t>
        </w:r>
    </w:ins>
    <w:del w:author="RKH RKH" w:date="2016-12-17T16:40:00Z" w:id="1">
        <w:r w:rsidDel="008B2A6A">
          <w:delText>the</w:delText>
        </w:r>
    </w:del>
</w:p>

第一个<w:p>元素不包含任何<w:ins><w:del>子元素。 但是,第二个<w:p>确实包含<w:ins><w:del>元素。

我目前正在使用以下内容选择所有段落元素:

@all_paragraph_nodes = @file.xpath('//w:p')

我想只选择包含至少一个<w:ins>元素或<w:del>元素的段落元素。

我怎么能用Nokogiri做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用:

@all_paragraph_nodes = @file.xpath('//w:p[w:ins or w:del]')

请注意,您的XML第3行中有拼写错误:

w:rsidRDefault="00D279DF

没有关闭。