我正在尝试使用以下库创建一个签名的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

09-09 19:57