Как получить значение родительского атрибута XML

#ruby #nokogiri

#ruby #nokogiri

Вопрос:

У меня есть несколько операторов, таких как:

 <House name="test1">
     <Room id="test2" name="test3" >
           <test name="test4" param="test5">
                 <blah id="test6" name="test7">
                 </blah>
           </test>
     </Room>
</House>
  

Когда blah name есть какое-то конкретное значение, например test7 , мне нужно соответствующее имя комнаты. Как мне этого добиться?

Ответ №1:

Я никогда не использовал Nokogiri, но я пытался, и это, кажется, работает:

  xml_doc.css('blah[name="test7"]').first.ancestors("Room").first['name']
 => "test3" 
  

Просто проверьте наличие nil s.

 2.3.1 :132 > xml_doc.css('blah[name="test7"]').map { |node| node.ancestors("Room").first['name'] }
 => ["test3"] 
  

Комментарии:

1. Как вы сделали это в первой попытке, если вы не использовали nokogiri? Я попробую этот код.

2. Я прочитал документы и сделал несколько поисковых запросов в Google. И попробовал в irb.

3. Я хочу, чтобы весь вывод не был первым [‘name’]) как мне это сделать. Удаление first[‘name’] не работает.

4. «Мне нужно соответствующее имя комнаты». Что вам нужно? Весь XML-фрагмент элемента Room?

5. Нет, то, что вы написали, прекрасно, но я думаю, что мой вопрос был неясен. Если приведенные выше XML-инструкции повторяются несколько раз, мне нужны все имена комнат.