我正在尝试使用Nokogiri搜索前缀为w
以及t
或br
的元素。
例如,如果这是解析返回的doc
的核心:
<w:t></w:t><w:br></w:br><w:t></w:t>
此搜索
doc.search('.//w:t','.//w:br')
结果:
['<w:t></w:t>','<w:t></w:t>','<w:br></w:br>']
相反,我要(元素按原始文档的顺序排列:]
['<w:t></w:t>','<w:br></w:br>','<w:t></w:t>']
使用CSS选择器,您可以这样做:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<xml>
<t></t><br></br><t></t>
</xml>
EOT
doc.search('t, br')
# => [#<Nokogiri::XML::Element:0x3c name="t">, #<Nokogiri::XML::Element:0x50 name="br">, #<Nokogiri::XML::Element:0x64 name="t">]
doc.search('t, br').map(&:to_html)
# => ["<t></t>", "<br>", "<t></t>"]
CSS选择器是Nokogiri的作者推荐的,因为它们通常更容易使用且噪音较小。
但是,您的XML具有名称空间,并且您没有向我们显示适当的名称空间声明,所以您需要找出来。
请参阅Nokogiri的Namespaces文档以获取更多信息。