2010-05-07 49 views
6

我试图使用XSLT生成一些C#代码 - 它的工作的伟大,直到我去仿制药,需要输出一些文字是这样的:XSLT:禁止输出在整个文档中逃脱

MyClass<Type> 

在这情况下,我已经找到了发出这个唯一的办法就是要做到以下几点:

MyClass<xsl:text disable-output-escaping="yes">&lt;</xsl:text>Type<xsl:text disable-output-escaping="yes">&gt;</xsl:text> 

其中:

  • 通常它都需要去1升国家统计局,否则你最终生成的代码
  • 在上面的例子中,我在技术上只能有1 <xsl:text />使用换行符,但通常类型Type被一些其他的模板给出,例如:

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

我不介意写&lt;很多,但我想避免只写一个字符<xsl:text disable-output-escaping="yes">&lt;</xsl:text>

对于整个文档有没有办法做disable-output-escaping="yes"

回答

2

这是不工作的原因是我应用转换 - 我使用XslCompiledTransform和XmlWriter转换我的xml,但根据Microsoft XML Teams blog只要我使用XmlWriter写我的输出标签被忽略!

我解决了这个由XmlWriters输出设置明确设置的那些XSL变换:

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

xslt.Transform("MyDocument.xml", XmlWriter.Create(Console.Out, ws)); 

一旦我做到这一点,变换尊重我的标签,一切都很好!

+0

拯救生命!谢谢! – killercowuk 2013-05-16 11:44:33

0

我知道这不是你的问题的直接答案,但。

巨大这里假定:你的财产以后这样的:

<classthing class="MyClass" type="atype"/> 

你可以称之为一个模板:

<xsl:template match="classthing"> 
    <xsl:call-template name="setgeneric"> 
     <xsl:with-param name="myclass"><xsl:value-of select="@class" /></xsl:with-param> 
     <xsl:with-param name="mytype"><xsl:value-of select="@type" /></xsl:with-param> 
    </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="setgeneric"> 
    <xsl:param name="myclass" /> 
    <xsl:param name="mytype" /> 
    <xsl:value-of select="$myclass"/> 
    <xsl:text disable-output-escaping="yes">&lt;</xsl:text> 
    <xsl:value-of select="$mytype"/> 
    <xsl:text disable-output-escaping="yes">&gt;</xsl:text> 
    </xsl:template> 
1

其伟大的工作,直到我得到 仿制药,需要输出一些文字 是这样的:

MyClass<Type> 

在这种情况下,我已经找到了发出这个 唯一的办法就是做 如下:

MyClass<xsl:text disable-output-escaping="yes">&lt;</xsl:text>Type<xsl:text 

禁用输出转义=“是”> >

当然,这是而不是唯一的方法,这是产生这样的结果最糟糕的方式。

是否有这样做 禁用输出转义=“是”为 整个文档的方法吗?

这是什么<xsl:output>method="text"属性是。不需要DOE

所以,使用tex吨输出方法,然后:

MyClass&lt;Type> 

下面是一个完整的小例子

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:template match="/"> 
    MyClass&lt;Type> 
</xsl:template> 
</xsl:stylesheet> 

当上述变换上任何XML文档(未使用)施加时,所需的结果产生

MyClass<Type> 

本人的XPath展示台的作者,其产生IE-像XML文件的呈现 - 在代码中没有任何DOE。

+0

我已经在我的XSLT中有'',但它没有区别 - 是否有可能我错误地调用了我的XSLT处理器? – Justin 2010-05-07 12:57:23

+0

@Kragen:我更新了答案,给你一个完整的例子,说明如何在没有DOE的情况下生成所需的文本。 – 2010-05-07 13:06:34

+0

谢谢 - 我不知道为什么我认为它不能正常工作,但现在这似乎适用于我。 – Justin 2010-05-07 13:52:14