不清楚你在问什么,所以选择一个:
require 'nokogiri'
doc = Nokogiri::XML::DocumentFragment.parse(<<EOT)
<param name="Артикул" code="article">LS_745094</param>
<param name="Комментарий" code="comment"/>
<param name="Цвета" code="colors">белый, прозрачный</param>
EOT
doc.search('param').map(&:to_html)
# => ["<param name=\"Артикул\" code=\"article\">",
# "<param name=\"Комментарий\" code=\"comment\">",
# "<param name=\"Цвета\" code=\"colors\">"]
search 将所有匹配的节点作为 NodeSet 返回。如果您需要对它们进行迭代,那很好,但通常它是矫枉过正的。
doc.at('param')['code'] # => "article"
doc.at('param').text # => "LS_745094"
at 与search('...').first 相同,返回第一个匹配节点。所以上面的代码找到第一个<param>并返回它。如果您知道您想要的标签始终是第一个标签,那将很有用。
doc.at('param[code="article"]').text # => "LS_745094"
doc.at('param[name="Артикул"]')['code'] # => "article"
doc.at('param[name="Артикул"]').text # => "LS_745094"
如果您需要为选择器提供更多详细信息,您可以使用标签中的参数及其值。获得所需节点后,您可以通过将其视为哈希来访问其参数,或者,如果您想要节点包装的文本,请使用 text。
注意,我使用的是 CSS 选择器。 Nokogiri 支持 CSS 和 XPath 选择器。 CSS 更具可读性,足以满足大多数查找。 XPath 更强大,通常更复杂且视觉上很嘈杂。