2017-02-08 2 views
-1

У меня есть XML-файл:Как разобрать файл XML с помощью Nokogiri и рубин

<root> 
    <person name="brother">Abhijeet</person> 
    <person name="sister">pratiksha</person> 
</root> 

Я хочу, чтобы разобрать с помощью Nokogiri. Я попытался использовать CSS и XPath, но он возвращает nil или значение первого элемента. Как получить другие значения? Я пробовал:

doc = Nokogiri::XML(xmlFile) 
doc.elements.each do |f| 
    f.each do |y| 
     p y 
    end 
end 

и:

doc.xpath("//person/sister") 
doc.at_xpath("//person/sister") 
+1

Пожалуйста, внесите свой код. –

+0

Пожалуйста, прочтите «[mcve]». Вы читали учебники Nokogiri? Они обсуждают, как искать и извлекать информацию. Вы искали в Интернете, как найти параметр узла на основе значения? Ваш селектор неверен, поэтому поиск объяснит, что делать. Важно также http://meta.stackoverflow.com/q/261592/128421. –

ответ

0

Это основной способ для поиска узла с заданным параметром и значением с помощью CSS:

require 'nokogiri' 

doc = Nokogiri::XML(<<EOT) 
<root> 
    <person name="brother">Abhijeet</person> 
    <person name="sister">pratiksha</person> 
</root> 
EOT 

doc.at('person[name="sister"]').to_html # => "<person name=\"sister\">pratiksha</person>" 

Вы должны исследования CSS и XPath и как их синтаксис работает. В XPath //person/sister означает поиск везде для <sister> узлов внутри <person> узлов, соответствие что-то вроде:

<root> 
    <person> 
    <sister /> 
    </person> 
    <person> 
    <sister /> 
    </person> 
</root> 

Где бы найти все <sister /> узлы. Он не ищет параметр узла.

Не делать:

doc.elements.each do |f| 
    f.each do |y| 
     p y 
    end 
end 

Вы собираетесь тратить много ресурсов процессора, идущие через каждый элемент. Вместо этого узнайте, как работают селекторы, поэтому вы можете использовать преимущества libXML.

Смежные вопросы