У меня есть следующий XML-документ:Как заставить Нокигири понять мои пространства имен?
<samlp:LogoutRequest ID="123456789" Version="2.0" IssueInstant="200904051217">
<saml:NameID>@[email protected]</saml:NameID>
<samlp:SessionIndex>abcdefg</samlp:SessionIndex>
</samlp:LogoutRequest>
Я хотел бы получить содержание SessionIndex
(то есть «АБВГДЕЖ») из него. Я попытался это:
XPATH_QUERY = "LogoutRequest[@ID][@Version='2.0'][IssueInstant]/SessionIndex"
SAML_XMLNS = 'urn:oasis:names:tc:SAML:2.0:assertion'
SAMLP_XMLNS = 'urn:oasis:names:tc:SAML:2.0:protocol'
require 'nokogiri'
doc = Nokogiri::XML(xml)
doc.xpath(XPATH_QUERY, 'saml' => SAML_XMLNS, 'samlp' => SAMLP_XMLNS)
, но я получаю следующие ошибки:
Nokogiri::XML::SyntaxError: Namespace prefix samlp on LogoutRequest is not defined
Nokogiri::XML::SyntaxError: Namespace prefix saml on NameID is not defined
Nokogiri::XML::SyntaxError: Namespace prefix samlp on SessionIndex is not defined
Я попытался добавить пространство имен в запросе XPath, но это ничего не меняет.
Почему я не могу убедить Нокогири в том, что пространства имен действительны?
Это, кажется, чтобы дать мне ту же ошибку ... в некоторых ситуациях. Выполнение этого буквально в irb отлично работает, но мои спецификации все еще взрываются. Гарр. –
Получил! Nokogiri возвращает узел «error», который обертывает найденный узел, но он _really_did_find_the_node_! –