2016-06-29 5 views
0

Я получаю XML-файл из API. Я пытаюсь разобрать его с помощью Mechanize, который получает его как XML-файл. Основание это Нокигири. Что бы я ни делал, я не могу заставить его возвращать что-либо с любыми переменными xpath. Кажется, что он распознает файл xml, и он входит в Mechanize :: XmlFile и показывает элементы, если я использую Nokogiri.Mechanize/Nokogiri не удается разобрать XML с xpath

Я могу работать.

xml.at("/") 

и получить ответ, но любые другие .at или .search I run возвращают нуль. , например.

xml.at("//Duration") 

Ниже приведен пример ответа.

@body = 
"<JobSearchResults xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.aspiremediagroup.net/jobboard/1.0/Beta\"><Duration>P0DT0H0M0.328S</Duration><JobCount>0</JobCount><JobIDs /><Jobs /><PageCount>0</PageCount><PageNo>0</PageNo><PageSize>20</PageSize><ProximityStats i:nil=\"true\" /><RoleSuggestions><String>ADDING</String></RoleSuggestions><Search><AccountGroupIDs i:nil=\"true\" /><AccountIDs i:nil=\"true\" /><ExcludeUnknownSalaries>false</ExcludeUnknownSalaries><Industries i:nil=\"true\" /><JobIDsOnly>false</JobIDsOnly><JobTypes><ID>Any</ID></JobTypes><Locations><Location><Country>GBR</Country><ID i:nil=\"true\" /><Latitude i:nil=\"true\" /><Longitude i:nil=\"true\" /><ParentLocation i:nil=\"true\" /><Text i:nil=\"true\" /></Location></Locations><MaxAge i:nil=\"true\" /><MaxDistance>25</MaxDistance><Page>1</Page><PageSize>20</PageSize><Role>adgqeg</Role><Salaries i:nil=\"true\" /><Skills i:nil=\"true\" /><SortOrder>OVERALL_SCORE_DESC</SortOrder></Search><SkillsSuggestions><String i:nil=\"true\" /></SkillsSuggestions><Started>2016-06-29T08:53:18.2215898Z</Started><ThisPageSize>0</ThisPageSize></JobSearchResults>" 

Любые идеи, почему это не работает?

+0

'doc.at ('Поиск/Местоположения ') 'и' doc.at (' Duration ') 'работают для меня. Что именно вы не можете получить с помощью 'at'? – mudasobwa

+0

Интересно ... Я ищу «// Продолжительность» и ничего не получаю .. но вы правы «Длительность» работает. – Carpela

+0

Используете ли вы Механизм для синтаксического анализа XML? Он разработан для работы с HTML, если это так, просто используйте Nokogiri самостоятельно. Кроме того, прочитайте «[mcve]». Нам нужен наименьший пример ввода XML, который демонстрирует проблему, плюс ваш минимальный код, демонстрирующий проблему и ожидаемый результат. –

ответ

0

Похоже работает

xml.remove_namespaces! 

устраняет проблему и позволяет осуществлять поиск документа с помощью // переменного XPATH стиля.

Я подозреваю, что есть лучшее решение, кроме этого.

0

Я лично предпочитаю вариант .css:

xml.css("Duration") 

Можно также использовать:

xml.at_css("Duration") 

Более подробную информацию можно найти здесь: http://www.nokogiri.org/tutorials/searching_a_xml_html_document.html

+0

К сожалению, я делаю то, что немного сложнее, чем css может иметь дело (выше это просто упрощенный пример). – Carpela

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