2010-05-07 12 views
6

Estoy tratando de generar algo de código C# usando XSLT - su gran trabajo hasta que llegue a los genéricos y la necesidad de salida de un texto como este:XSLT: salida Desactivar escapar de todo un documento

MyClass<Type> 

En este caso me he dado cuenta que la única manera de emitir esto es hacer lo siguiente:

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

Dónde:

  • a menudo, todo tiene que ir en un l INE, de lo contrario terminan con saltos de línea en el código generado
  • En el ejemplo anterior que técnicamente podría haber sólo un 1 <xsl:text /> utilizada, sin embargo por lo general el tipo Type está dada por alguna otra plantilla, por ejemplo:

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

No me importa tener que escribir &lt; mucho, pero me gustaría evitar escribir <xsl:text disable-output-escaping="yes">&lt;</xsl:text> para un solo carácter.

¿Hay alguna forma de hacer disable-output-escaping="yes" para todo el documento?

Respuesta

2

La razón por la que esto no funcionaba se debía a que estaba aplicando la transformación. Estaba usando una XslCompiledTransform y una XmlWriter para transformar mi xml, pero de acuerdo con Microsoft XML Teams blog tan pronto como uso un XmlWriter para escribir mi salida la etiqueta se ignora!

i fijo esto estableciendo explícitamente la configuración de salida XmlWriters a los de la transformación XSL:

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

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

Una vez que hice esto, la transformada respetó mi etiqueta, y todo estaba bien!

+0

¡Ahorro de vida! ¡Gracias! – killercowuk

0

Sé que esto NO es una respuesta directa de su pregunta, pero.

enorme suposición aquí: usted tiene algo así como:

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

Se podría definir una plantilla:

<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

su trabajo grande hasta que llego a genéricos y necesitará producir alguna de texto como este:

MyClass<Type> 

En este caso me he dado cuenta que la única manera para emitir esto es hacer el siguiente:

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

disable-output-escaping = "yes"> >

Ciertamente , esto es no de la única manera y esta es la peor forma de producir tal resultado.

¿Hay alguna manera de hacer disable-output-escaping = "sí" para todo el documento ?

Esto es lo que el atributo de method="text"<xsl:output> es para. No es necesario DOE.

lo tanto, utilizar el método de salida tex t y luego:

MyClass&lt;Type> 

Aquí es un pequeño ejemplo completo.

<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> 

Cuando se aplica la transformación anterior en cualquier documento XML (no se utiliza), el resultado deseado se produce:

MyClass<Type> 

yo soy el autor de la XPath visualizador, que produce IE- como presentación de archivos XML - en ninguna parte del código hay DOE.

+0

Ya tengo '' en mi XSLT, pero no hace ninguna diferencia - ¿es posible que llame incorrectamente a mi procesador XSLT? – Justin

+0

@Kragen: actualicé la respuesta para darle un ejemplo completo de cómo generar el texto deseado sin DOE. –

+0

Gracias - No tengo idea de por qué pensé que no estaba funcionando, pero esto parece funcionar para mí ahora. – Justin

Cuestiones relacionadas