首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有命名空间的xpath查询根元素

带有命名空间的xpath查询根元素
EN

Stack Overflow用户
提问于 2019-11-08 16:18:45
回答 1查看 900关注 0票数 3

我试图使用命名空间来处理根元素,并提供对库xml密码的引用。

我没有给出正确的路径,请告知。目的是对文档进行签名,以便在标记<samlp:Response之后插入签名。

代码语言:javascript
复制
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="efedb3b0-909f-4b39-b8c0-57427ee8dc83" Version="2.0" IssueInstant="2019-11-08T15:34:51.272Z">

    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://www.example.com</saml:Issuer>

</samlp:Response>

nodeJS代码

代码语言:javascript
复制
var SignedXml = require('xml-crypto').SignedXml, fs = require('fs');
var sig = new SignedXml();

sig.addReference("//*[local-name(.)='samlp:Response']");

sig.signingKey = fs.readFileSync(__dirname + "/client.pem");
sig.computeSignature(xml);
fs.writeFileSync(__dirname + "/signed.xml", sig.getSignedXml());

尝试

代码语言:javascript
复制
sig.addReference("//samlp:Response");

错误:无法解析QName采样

不过,它在https://www.freeformatter.com/xpath-tester.html工作得很好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-08 16:28:16

如果希望击败/绕过命名空间,则更改

代码语言:javascript
复制
sig.addReference("//*[local-name(.)='samlp:Response']");

代码语言:javascript
复制
sig.addReference("//*[local-name()='Response']");

因为命名空间前缀samlp不是本地名称Response的一部分。

有关XPath中名称空间的全面答案,请参见XPath如何处理XML名称空间?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58770257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档