Ich habe die folgende XML-Dokument:Wie bekomme ich Nokogiri meine Namespaces zu verstehen?
<samlp:LogoutRequest ID="123456789" Version="2.0" IssueInstant="200904051217">
<saml:NameID>@[email protected]</saml:NameID>
<samlp:SessionIndex>abcdefg</samlp:SessionIndex>
</samlp:LogoutRequest>
Ich mag würde den Inhalt des SessionIndex
erhalten (das heißt, ‚abcdefg‘) aus ihm heraus. Ich habe dies versucht:
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)
aber ich erhalte die folgenden Fehler:
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
Ich habe versucht, die Namensräume auf die XPath-Abfrage hinzufügen, aber das ändert nichts.
Warum kann ich Nokogiri nicht überzeugen, dass die Namespaces gültig sind?
liefern, scheint mir die gleichen Fehler zu geben ... in manchen Situationen. Es funktioniert buchstäblich in irb funktioniert gut, aber meine Spezifikationen laufen noch in die Luft. Garr. –
Verstanden! Nokogiri gibt einen "Fehler" -Knoten zurück, der den gefundenen Knoten umschließt, aber _really_did_find_the_node_! –