如何搜索两条路径,但使用Nokogiri依次获得结果

问题描述 投票:-1回答:1

我正在尝试使用Nokogiri搜索前缀为w以及tbr的元素。

例如,如果这是解析返回的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>']
ruby nokogiri
1个回答
0
投票

使用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文档以获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.