【发布时间】:2017-05-11 13:26:40
【问题描述】:
我需要用自定义处理指令替换部分 XSL 样式表。我们的想法是有一个这样的默认样式表:
<xsl:stylesheet xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<Placeholder />
</xsl:stylesheet>
元素<Placeholder/> 应该在运行时用自定义模板替换,例如喜欢:
var template = "<xsl:template match='/'>Today: <xsl:value-of select='Details/@date)'/>.</xsl:template>"
到目前为止我尝试了什么?
第一种方法不是使用占位符元素,而是使用具有{0} 的字符串格式而不是元素。但我无法在我的最终解决方案中使用该选项,尽管它工作正常。
相反,我尝试从模板创建 XElement 并替换占位符元素:
var document = XDocument.Parse(/* above xml */); // works fine
document.Root.Element("Placeholder").ReplaceWith(
XElement.Parse(template) // causes XmlException
);
不幸的是,这导致System.Xml.XmlException:
'xsl' 是一个未声明的前缀。第 1 行,第 2 位。
有没有简单的方法来解决这个问题?
【问题讨论】: