Mam następujący dokument XML:Jak ustawić Nokogiri tak, aby rozumiał moje przestrzenie nazw?
<samlp:LogoutRequest ID="123456789" Version="2.0" IssueInstant="200904051217">
<saml:NameID>@[email protected]</saml:NameID>
<samlp:SessionIndex>abcdefg</samlp:SessionIndex>
</samlp:LogoutRequest>
chciałbym uzyskać zawartość SessionIndex
(czyli „abcdefg”) z niego. Próbowałem to:
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)
ale otrzymuję następujące błędy:
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
Próbowałem dodawanie nazw do kwerendy XPath, ale to niczego nie zmienia.
Dlaczego nie mogę przekonać Nokogiri, że przestrzenie nazw są ważne?
który wydaje mi dać te same błędy ... w niektórych sytuacjach. Robiąc to dosłownie w Ib działa dobrze, ale działa moje specs nadal wieje. Garr. –
Gotowy! Nokogiri zwraca węzeł "błędu", który owija węzeł, który znalazł, ale jest to _really_did_find_the_node_! –