我有以下XML文档:
<samlp:LogoutRequest ID="123456789" Version="2.0" IssueInstant="200904051217"> <saml:NameID>@NOT_USED@</saml:NameID> <samlp:SessionIndex>abcdefg</samlp:SessionIndex> </samlp:LogoutRequest>
我想从中获取SessionIndex(即’abcdefg’)的内容.我试过这个:
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查询中,但这并没有改变任何东西.
为什么我不能说服Nokogiri命名空间是有效的?
看起来这个文档中的命名空间没有被正确声明 – 根节点上应该有xmlns:samlp和xmlns:saml属性.在这种情况下,Nokogiri基本上忽略了命名空间(因为它无法将它们映射到URI或URN),因此如果删除它们,XPath就可以工作,即
doc.xpath(XPATH_QUERY)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。