gpt4 book ai didi

c# - 尽管使用 XmlNamespaceManager,XPATH SelectSingleNode 仍返回 null

转载 作者:数据小太阳 更新时间:2023-10-29 02:29:57 26 4
gpt4 key购买 nike

我正在尝试测试如下所示的 XML 文档(在本例中为 SAML):

<saml2p:LogoutRequest xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" ID="_bbcf6cc5-8832-4567-9a52-7baef04676d7" Version="2.0" IssueInstant="2014-10-21T13:24:54.1397367Z" NotOnOrAfter="2014-10-21T13:34:54.1397367Z">
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#_bbcf6cc5-8832-4567-9a52-7baef04676d7">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>DigestValueGoesHere!</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>SignatureValueGoesHere!
</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>X509CertificateGoesHere!</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</saml2p:LogoutRequest>

为此,我创建了一些扩展,试图用它们来测试 XML:

public static class XmlExtensions
{
public static XmlNode Signature(this XmlDocument document)
{
return document.SelectSingleNodeFromDocumentRoot(@"/saml2p:LogoutRequest/Signature");
}

private static XmlNode SelectSingleNodeFromDocumentRoot(this XmlDocument document, string path)
{
var ns = new XmlNamespaceManager(document.NameTable);

ns.AddNamespace("saml2", @"urn:oasis:names:tc:SAML:2.0:assertion");
ns.AddNamespace("saml2p", @"urn:oasis:names:tc:SAML:2.0:protocol");
ns.AddNamespace("ns1", @"http://www.w3.org/2000/09/xmldsig#");

var result = document.SelectSingleNode(path, ns);
return result;
}
}

在我的一个测试中,我试图检索 /saml2p:LogoutRequest/Signature 元素,但是我的扩展返回 null。为什么?我想我应该使用提供的 ns 管理器并添加了 xml namespace ?请注意,查询路径在 XPath Visualizer Tool 中运行完美。

最佳答案

Signature在命名空间xmlns="http://www.w3.org/2000/09/xmldsig#"中,所以需要调整:

return document.SelectSingleNodeFromDocumentRoot(@"/saml2p:LogoutRequest/ns1:Signature");

关于c# - 尽管使用 XmlNamespaceManager,XPATH SelectSingleNode 仍返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26489329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com