在REXML XPATH匹配函数中,多个命名空间在命名空间映射中做了什么?

时间:2017-03-15 15:25:18

标签: ruby xml xpath rexml

我试图准确理解785行在这里做了什么:

https://github.com/onelogin/ruby-saml/blob/15fb4789f8cd119fdbd722d58c659129d23a256d/lib/onelogin/ruby-saml/response.rb#L777

但我在文档中找不到明确的解释,例如:这里:

https://contest-server.cs.uchicago.edu/ref/ruby_1_9_3_stdlib/libdoc/rexml/rdoc/REXML/XPath.html#method-c-match

即。我可以理解针对单个命名空间的目标(" ps"),但是第二个命名空间(" d")的添加是什么呢?

编辑:跟进澄清:鉴于'协议'将会成功解析以此为开头的文档。命名空间在文档中是小写的,但在代码中是大写的?

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Version="2.0" >

1 个答案:

答案 0 :(得分:2)

通过XPath查询的响应使用两个不同的名称空间

  • 绑定到p命名空间前缀的命名空间用于SAML Coreurn:oasis:names:tc:SAML:2.0:protocol)。
  • 绑定到ds的命名空间用于XML Signaturehttp://www.w3.org/2000/09/xmldsig#)。

并且两者都通过代码中引用行的REXML::XPath.match参数声明到XPath处理器:

      { "p" => PROTOCOL, "ds" => DSIG },

每个问题更新更新

名称空间前缀 p)是任意的,无需与文档中使用的名称匹配。 名称空间 urn:oasis:names:tc:SAML:2.0:protocol)非常重要,必须与文档中使用的名称相匹配。两者都区分大小写。