je le document XML suivant:Comment obtenir que Nokogiri comprenne mes espaces de noms?
<samlp:LogoutRequest ID="123456789" Version="2.0" IssueInstant="200904051217">
<saml:NameID>@[email protected]</saml:NameID>
<samlp:SessionIndex>abcdefg</samlp:SessionIndex>
</samlp:LogoutRequest>
Je voudrais obtenir le contenu du SessionIndex
(qui est « abcdefg ») hors de lui. Je l'ai essayé ceci:
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)
mais je reçois les erreurs suivantes:
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
J'ai essayé d'ajouter les espaces de noms pour la requête XPath, mais cela ne change rien. Pourquoi ne puis-je convaincre Nokogiri que les espaces de noms sont valides?
Cela me semble donner les mêmes erreurs ... dans certaines situations. Le faire littéralement en irb fonctionne bien, mais courir mes spécifications explosent toujours. Garr. –
J'ai compris! Nokogiri retourne un noeud "error" qui enveloppe le noeud qu'il a trouvé, mais il _really_did_find_the_node_! –