如何用xml只拉出所需的元素? (引入nokogiri)

时间:2016-10-26 12:47:07

标签: ruby sinatra nokogiri

是否可以从块中仅提取数据select schema_where_it_installed.gen_salt('md5'); -- For my example: select nd.gen_salt('md5');

code="article"

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

接收所有doc.css("offer param")

我只需要一个param

2 个答案:

答案 0 :(得分:0)

对于给定的xml

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

你可以试试这个

require 'nokogiri'

xml = Nokogiri::XML(File.open('YOUR_FILE'))    
el = xml.xpath('//param[@code="article"]')

它会给你

[#<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">]>]

然后您可以获取el

的任何属性
el.text # => LS_745094

答案 1 :(得分:0)

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

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\">"]

search将所有匹配的节点作为NodeSet返回。如果你需要对它们进行迭代,那就没关系,但通常都是过度的。

doc.at('param')['code'] # => "article"
doc.at('param').text # => "LS_745094"

atsearch('...').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更强大,通常更复杂,视觉上更嘈杂。