Как извлечь имя атрибута и пару значений из XML с помощью Nokogiri? - PullRequest
1 голос
/ 02 августа 2010

Пример:

<fruit name="mango"/>

Я хочу получить вывод как:

name="mango"

Ответы [ 4 ]

3 голосов
/ 02 августа 2010

Вы можете использовать метод attributes для извлечения атрибутов некоторых Node в качестве хэша.

Возвращает хеш, содержащий атрибуты узла. Ключом является имя атрибута, значением является Nokogiri :: XML :: Attr, представляющий атрибут.

Прочтите это тоже.

Я покажу вам пример. Вот документ XML:

<?xml version="1.0" encoding="utf-8" ?>
<files>
    <file exists="true">
        <content />
    </file>
    <file exists="false">
        <content />
    </file>
</files>

И код Ruby для его обработки:

require "nokogiri"

doc = Nokogiri::XML(File.read "my.xml")

doc.css("files file[exists]").first.attributes
# => #<Nokogiri::XML::Attr:0x1184470 name="exists" value="true">
doc.css("files file[exists]").first.attributes["exists"].value
# => "true"
2 голосов
/ 03 августа 2010
xml   = %(<fruit name="mango"/>)
fruit = Nokogiri.XML(xml) % "fruit"

fruit.attributes.values.map(&:to_xml).join.strip
0 голосов
/ 08 сентября 2015

Некоторый код, который выводит "name =" mango "из xml input""

require 'nokogiri'
doc = Nokogiri::XML %q|<xml><fruit name="mango"/></xml>|
element = doc.xpath("//fruit")
hash =  Hash[doc.xpath("//fruit")[0].attributes.map{ |n, v| [ n, v.value ]}]
hash.each do |k, v|
  puts  %Q|#{k}="#{v}"|
end
0 голосов
/ 27 октября 2010
def getattributestest(doc,attr,rexg)
  arr = doc.css(rexg)
  cnode = arr.select {|node|  node}
  cnode.inject([]) do |rs,i|
    rs << i.attributes[attr]
  end
...