我正在使用Saxon在.Net应用程序中执行XSLT转换。这是我的.net代码
private void xsltTransform()
{
string xsltFile = Path.Combine(TEirPath, "test.xsl");
string outputFile = Path.Combine(TEirPath, "test.html");
var xslt = new FileInfo(xsltFile);
var processor = new Processor();
var xsltCompiler = processor.NewXsltCompiler();
var xsltExecutable = xsltCompiler.Compile(new Uri(xslt.FullName));
var destination = new DomDestination();
var xsltTransformer = xsltExecutable.Load();
xsltTransformer.InitialTemplate = new QName("startTemplate");
xsltTransformer.Run(destination);
destination.XmlDocument.Save(outputFile);
}
这是我的示例test.xsl
<xsl:stylesheet version ="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xhtml" encoding="UTF-8"/>
<xsl:template name="startTemplate" >
<a>
<xsl:text disable-output-escaping="no">Test1 < > Test1</xsl:text>
<br/>
<xsl:text disable-output-escaping="yes">Test2 < > Test2</xsl:text>
</a>
</xsl:template>
</xsl:stylesheet>
我需要让输出在转义和非转义表单中显示特殊字符(&lt;&gt;)。但是从上面的xsl示例中,我在test.html中得到的结果总是被转义。我认为问题是将Destination输出为XmlDocument,但我不知道如何解决它。有人可以给我一些建议吗?提前谢谢。
答案 0 :(得分:1)
disable-output-escaping
会影响XSLT序列化程序的操作。如果XSLT处理器没有执行序列化,则它不起作用。在你的情况下,序列化是使用XmlDocument.Save完成的,它不知道XSLT样式表中的任何内容。
如果要使用disable-output-escaping
或其他XSLT序列化选项,则需要将转换输出发送到(Saxon)序列化程序。
话虽如此,当人们使用disable-output-escaping
时,10次中有9次会有更好的方法来解决问题。