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=\"Артикул\" code=\"article\">",
# "<param name=\"Комментарий\" code=\"comment\">",
# "<param name=\"Цвета\" 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=\"Артикул\" code=\"article\">",
# "<param name=\"Комментарий\" code=\"comment\">",
# "<param name=\"Цвета\" 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"