我正在尝试使用以下库创建一个签名的xml分离签名文件:[opensbr]
我需要在TransformChain中添加一个xpath过滤器,但是在调用SignedXml.ComputeSignature
时会引发一个异常,即名称空间xbrli
无效。
xpath:/xbrli:xbrl//*[not(local-name()='DocumentAdoptionStatus' or local-name()='DocumentAdoptionDate' and namespace-uri()='http://www.nltaxonomie.nl/8.0/basis/venj/items/bw2-data')]
构造转换(按照Microsoft示例):public static XmlDsigXPathTransform CreateXPathTransform(string XPathString) { XmlDocument doc = new XmlDocument(); XmlElement xPathElem = doc.CreateElement("XPath"); xPathElem.InnerText = XPathString; XmlDsigXPathTransform xForm = new XmlDsigXPathTransform(); xForm.LoadInnerXml(xPathElem.SelectNodes(".")); return xForm; }
xpath和xml文件均有效。
如何在XmlDsigXPathTransform
中使用名称空间前缀?
最佳答案
MSDN example *建议您可以在XPath
元素上声明名称空间前缀:
.....
XmlElement xPathElem = doc.CreateElement("XPath");
xPathElem.SetAttribute("xmlns:xbrl", "xbrl namespace uri here");
xPathElem.InnerText = XPathString;
.....
*)参见示例2中的方法
LoadTransformByXml