Проверьте, есть ли в xml-ответе type = "array" с помощью Nokogiri? - PullRequest
1 голос
/ 21 ноября 2011

С учетом следующего xml, который был разобран в @response с использованием Nokogiri

<?xml version="1.0" encoding="UTF-8"?>
<foos type="array">
  <foo>
    <id type="integer">1</id>
    <name>bar</name>
  </foo>
</foos>

Существует ли xpath такой, что @response.xpath(xpath) возвращает array?

Предположим, что этот xpath должен повторно использоваться в нескольких документах, где имя foo не согласовано.

Если xpath не является правильным инструментом для решения этой проблемы, предоставляет ли Нокогири метод, который является?

Этот xml автоматически генерируется платформой rails, и ответ на этот вопрос предназначен для создания XML, эквивалентного этой функции Cucumber для ответов JSON .

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Если вы хотите выбрать корневой узел, когда его атрибут type равен array (независимо от имени корневого элемента), используйте это:

/*[@type='array']

Для его дочерних элементов используйте:

/*[@type='array']/*
1 голос
/ 21 ноября 2011

Просто:

if doc.root['type']=='array'

Вот контрольный пример:

@response = <<ENDXML
<?xml version="1.0" encoding="UTF-8"?>
<foos type="array">
  <foo>
    <id type="integer">1</id>
    <name>bar</name>
  </foo>
</foos>
ENDXML

require 'nokogiri'
doc = Nokogiri.XML(@response)
if doc.root['type']=='array'
  puts "It is!"
else
  puts "Nope"
end

В зависимости от ваших потребностей вы можете:

case doc.root['type']
  when 'array'
    #...
  when 'string'
    #...
  else
    #...
end
...