XSLT:禁用整个文档中的输出转义

Jus*_*tin 6 .net xslt code-generation

我正在尝试使用xslt生成一些C#代码 - 它工作得很好,直到我得到泛型并需要输出这样的文本:

MyClass<Type>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我发现发出此信息的唯一方法是执行以下操作:

MyClass<xsl:text disable-output-escaping="yes">&lt;</xsl:text>Type<xsl:text disable-output-escaping="yes">&gt;</xsl:text>
Run Code Online (Sandbox Code Playgroud)

哪里:

  • 通常它都需要在一行上运行,否则最终会在生成的代码中出现换行符
  • 在上面的示例中,我在技术上只能使用1 <xsl:text />,但通常类型Type由其他模板给出,例如:

<xsl:value-of select="@type" />

我不介意写&lt;很多东西,但我想避免<xsl:text disable-output-escaping="yes">&lt;</xsl:text>只为一个角色写作!

disable-output-escaping="yes"对整个文档有什么办法吗?

Jus*_*tin 2

这不起作用的原因完全取决于我正在应用转换 - 我正在使用 XslCompiledTransform 和 XmlWriter 来转换我的 xml,但是根据Microsoft XML Teams 博客,一旦我使用 XmlWriter 编写输出该标签被忽略!

我通过将 XmlWriters 输出设置显式设置为 Xsl 转换的输出设置来修复此问题:

XmlWriterSettings ws = xslt.OutputSettings.Clone();
ws.CheckCharacters = false;

xslt.Transform("MyDocument.xml", XmlWriter.Create(Console.Out, ws));
Run Code Online (Sandbox Code Playgroud)

一旦我这样做了,转换就尊重了我的标签,一切都很好!