Ruby 如何使用xml仅提取所需的元素?(Nokogiri)

Ruby 如何使用xml仅提取所需的元素?(Nokogiri),ruby,sinatra,nokogiri,Ruby,Sinatra,Nokogiri,是否可以仅从块中提取数据code=“article” <param name="Артикул" code="article">LS_745094</param> <param name="Комментарий" code="comment"/> <param name="Цвета" code="colors">белый, прозрачный</param> LS_745094 белый, прозрачный 我做doc

是否可以仅从块中提取数据
code=“article”

<param name="Артикул" code="article">LS_745094</param>
<param name="Комментарий" code="comment"/>
<param name="Цвета" code="colors">белый, прозрачный</param>
LS_745094
белый, прозрачный
我做
doc.css(“提供参数”)

接收所有
param

对于给定的xml,我只需要一个
LS_745094

<node>
  <param name="Артикул" code="article">LS_745094</param>
  <param name="Комментарий" code="comment"/>
  <param name="Цвета" code="colors">белый, прозрачный</param>
</node>
它会给你

[#<Nokogiri::XML::Element:0x3fdf8880a8ac name="param" attributes=[#<Nokogiri::XML::Attr:0x3fdf8880a7a8 name="name" value="Артикул">, #<Nokogiri::XML::Attr:0x3fdf8880a794 name="code" value="article">] children=[#<Nokogiri::XML::Text:0x3fdf8880788c "LS_745094">]>]

不清楚你在问什么,所以选择一个:

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=\"&#x410;&#x440;&#x442;&#x438;&#x43A;&#x443;&#x43B;\" code=\"article\">",
#     "<param name=\"&#x41A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x439;\" code=\"comment\">",
#     "<param name=\"&#x426;&#x432;&#x435;&#x442;&#x430;\" code=\"colors\">"]
at
search(“…”)相同。首先
,返回第一个匹配节点。因此,上面的代码找到第一个
,并返回它。如果你知道你想要的标签总是第一个,那就很有用了

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功能更强大,通常更复杂,视觉上也更嘈杂。

欢迎使用堆栈溢出。你的问题不清楚,也问得不好。请阅读“”和链接页,以及“”。我们需要演示问题的代码的最小示例,以及您期望的输出。
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=\"&#x410;&#x440;&#x442;&#x438;&#x43A;&#x443;&#x43B;\" code=\"article\">",
#     "<param name=\"&#x41A;&#x43E;&#x43C;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x440;&#x438;&#x439;\" code=\"comment\">",
#     "<param name=\"&#x426;&#x432;&#x435;&#x442;&#x430;\" code=\"colors\">"]
doc.at('param')['code'] # => "article"
doc.at('param').text # => "LS_745094"
doc.at('param[code="article"]').text # => "LS_745094"
doc.at('param[name="Артикул"]')['code'] # => "article"
doc.at('param[name="Артикул"]').text # => "LS_745094"