tengo el siguiente documento XML:¿Cómo hago que Nokogiri comprenda mis espacios de nombres?
<samlp:LogoutRequest ID="123456789" Version="2.0" IssueInstant="200904051217">
<saml:NameID>@[email protected]</saml:NameID>
<samlp:SessionIndex>abcdefg</samlp:SessionIndex>
</samlp:LogoutRequest>
me gustaría obtener el contenido de la SessionIndex
(es decir, 'abcdefg') fuera de ella. He intentado esto:
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)
pero consigo los siguientes errores:
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
He intentado añadir los espacios de nombres a la consulta XPath, pero eso no cambia nada.
¿Por qué no puedo convencer a Nokogiri de que los espacios de nombres son válidos?
Eso me parece dar los mismos errores ... en algunas situaciones. Hacerlo literalmente en IRB funciona bien, pero ejecutar mis especificaciones todavía explota. Garr. –
¡Entendido! Nokogiri devuelve un nodo de "error" que envuelve el nodo que encontró, ¡pero _really_did_find_the_node_! –