<w:p>
<w:r>
<w:t>The table predicted, with </w:t>
</w:r>
<w:ins w:author="RKH RKH" w:date="2016-11-06T17:53:00Z" w:id="0">
<w:r>
<w:t>impressive</w:t>
</w:r>
</w:ins>
<w:del w:author="RKH RKH" w:date="2016-11-06T17:53:00Z" w:id="1">
<w:r w:rsidDel="001F31B2" w:rsidRPr="001F31B2">
<w:delText>stunning</w:delText>
</w:r>
</w:del>
</w:p>
<w:p>
<w:r>
<w:t>The man started </w:t>
</w:r>
<w:ins w:author="RKH RKH" w:date="2016-11-06T17:53:00Z" w:id="0">
<w:r>
<w:t>to run.</w:t>
</w:r>
</w:ins>
<w:del w:author="RKH RKH" w:date="2016-11-06T17:53:00Z" w:id="1">
<w:r w:rsidDel="001F31B2" w:rsidRPr="001F31B2">
<w:delText>to hike.</w:delText>
</w:r>
</w:del>
</w:p>
我得到如下段落并循环遍历它们。
@all_paragraph_nodes = @file.xpath('//w:p')
@all_paragraph_nodes.each_with_index do |p, index|
...
我想从循环中的每个段落中获取文本,不包括<w:del>
元素内的文本。
我怎么能用Nokogiri做到这一点?
答案 0 :(得分:1)
您可以选择w:p
的所有子元素,然后使用带有not()
和name()
的谓词来过滤掉w:del
元素。
@all_paragraph_nodes.each_with_index do |p, index|
text_nodes = p.xpath("*[not(name(.)='w:del')]//text()")
# ... process however you want
end
您可能需要删除空文本节点。您可以在Ruby中执行此操作,也可以使用normalize-space()
p.xpath("*[not(name(.)='w:del')]//text()[normalize-space()]")