2014-01-06 3 views
1

Есть ли простой способ определить, существует ли узел XML в Rails?Определить, существует ли узел XML в Rails

Чтобы получить @result переменного экземпляра я использую

response, data = Net::HTTP.post_form(url, params) 
@result = Hash.from_xml(response.body) 

Я пробовал:

if @result['GetProperties']['Errors'].exists? 

или просто

if @result['GetProperties']['Errors'] 

, но как результат в следующей ошибке:

неопределенный метод `[]» для ноль: NilClass

я должен пояснить, что я без проблем разбора XML - Мне просто нужно знать, как определить, если узел существует

+0

Вы должны добавить больше деталей. Либо '@ result' равен нулю, либо' @result ['GetProperties'] 'is. После того, как у вас есть XML, переведите его в 'Nokogiri :: XML()' и используйте 'xpath_at' для получения узлов. – Phlip

+0

Какой XML-парсер/библиотека вы используете? Что такое '@result? 'И т. Д. – JKillian

+0

не использует какой-либо определенный синтаксический анализатор на данный момент - должен ли я делать? – tommyd456

ответ

0

Учитывая вашу дополнительную информацию - что-то, как это будет работать:

if @result && @result['GetProperties'] && @result['GetProperties']['Errors'] 

Если Hash.from_xml не когда-нибудь вернется nil, (просто проверить документ на этом, я лично не знаю) вы могли бы упростить его:

if @result['GetProperties'] && @result['GetProperties']['Errors'] 

Наконец, если вы думаете, что это своего рода небрежный, вы могли бы рассмотреть возможность написания метод какой-то, чтобы проверить вложенные свойства сразу, как здесь: https://stackoverflow.com/a/1820492/3124288

+0

также может использовать предварительно построенный синтаксический анализатор XML, например Nokigiri http://nokogiri.org/ –

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