我正在尝试使用名称空间解决根元素,并提供对库xml-crypto的引用。
我没有正确给出路径,请告知。目的是对文档进行签名,以便可以在标签后立即插入签名<samlp:Response
<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代码
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());
尝试次数
sig.addReference("//samlp:Response");
错误:无法解析QName samlp
如果您希望取消/绕过命名空间,请更改
sig.addReference("//*[local-name(.)='samlp:Response']");
至
sig.addReference("//*[local-name()='Response']");
因为名称空间前缀samlp
并非本地名称的一部分Response
。
有关XPath中名称空间的全面解答,请参阅XPath如何处理XML名称空间?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句