2013-04-09 3 views
3

У меня есть следующий XML:XML проблема пространства имен с Nokogiri

<body> 
    <hello xmlns='http://...'> 
    <world>yes</world> 
    </hello> 
</body> 

Когда я загружаю, что в XML-документ Nokogiri и вызвать document.at_css "world", я получаю nil обратно. Но когда я удаляю пространство имен для hello, он отлично работает. Я знаю, что могу позвонить document.remove_namespaces!, но почему он не будет работать с пространством имен?

+0

возможно дубликат [Nokogiri/Xpath имен запросов] (http://stackoverflow.com/questions/4690737/nokogiri-xpath-namespace-query) –

+0

Это относится к 'css', а не' xpath'. – TheDude

+0

Метод пространства имен идентичен. Неважно, если ваш запрос - это CSS или XPath. –

ответ

1

Поскольку Nokogiri требует, чтобы вы зарегистрировали пространства имен XML, на которые вы запрашиваете (более подробно о XML Namespaces). Но вы все равно можете запросить элемент, если вы укажете его пространство имен при вызове at_css. Чтобы узнать точное использование, проверьте css method documentation. Он должен закончить тем, что что-то вроде этого:

document.at_css "world", 'namespace_name' => 'namespace URI' 
+2

Спасибо, что указал на этот пример. Что вы не работали, но это сработало, когда я включил трубку пространства имен: 'document.at_css 'ns | world', 'ns' => 'namespace URI' – TheDude

+3

Стоит отметить, что если есть пространство имен, объявленное на root, то методы '# at_css' или' # css' будут неявно включать пространство имен в запрос. –

+0

Не знал этого! – TheDude

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