2010-05-07 31 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