2010-05-07 6 views
6

Je suis en train de générer un code C# en utilisant xslt - son travail grand jusqu'à ce que je les médicaments génériques et ont besoin de sortie un texte comme celui-ci:XSLT: Sortie Désactiver fuite dans un document entier

MyClass<Type> 

Dans ce cas, j'ai trouvé que la seule façon d'émettre est de faire ce qui suit:

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

Où:

  • Souvent, tout doit aller sur un l ine, sinon vous vous retrouvez avec des sauts de ligne dans le code généré
  • Dans l'exemple ci-dessus, je ne pouvais techniquement avons utilisé seulement 1 <xsl:text />, mais généralement le type Type est donnée par un autre modèle, par exemple:

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

Cela ne me dérange pas d'avoir à écrire &lt; beaucoup, mais je voudrais éviter d'écrire <xsl:text disable-output-escaping="yes">&lt;</xsl:text> pour un seul caractère!

Y a-t-il un moyen de faire disable-output-escaping="yes" pour l'ensemble du document?

Répondre

2

La raison pour laquelle cela ne fonctionnait pas était que j'appliquais la transformation - j'utilisais un XslCompiledTransform et un XmlWriter pour transformer mon xml, cependant selon Microsoft XML Teams blog dès que j'utilise un XmlWriter pour écrire mon sortie la balise est ignorée!

Je fixe en réglant explicitement les paramètres de sortie de XmlWriters à ceux de la transformation xsl:

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

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

Une fois que je l'ai fait, la transform respecté mon tag, et tout allait bien!

+0

Life Saver! Merci! – killercowuk

0

Je sais que ce n'est pas une réponse directe à votre question mais.

hypothèse énorme ici: vous avez somthing comme:

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

Vous pouvez appeler un modèle:

<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

son travail bien jusqu'à ce que j'arrive à génériques et ont besoin pour produire un texte comme ceci:

MyClass<Type> 

Dans ce cas, j'ai trouvé que la seule façon d'émettre est de faire la suivante:

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

disable-output-escaping = "yes"> >

Certainement , c'est pas le seul moyen et c'est la pire façon de produire un tel résultat.

Est-il possible de faire disable-output-escaping = "yes" pour l'ensemble du document ?

C'est ce que l'attribut method="text" de <xsl:output> est pour. Pas besoin de DOE.

, utilisez la méthode de sortie tex t puis:

MyClass&lt;Type> 

Voici un petit exemple complet.

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

Lorsque la transformation ci-dessus est appliquée sur tout document XML (non utilisé), le résultat recherché est produit:

MyClass<Type> 

Je suis l'auteur du XPath Visualizer, qui produit IE- comme la présentation de fichiers XML - nulle part dans le code il n'y a un DOE.

+0

J'ai déjà 'dans mon XSLT, mais cela ne fait aucune différence - est-il possible que j'appelle mon processeur XSLT incorrectement? – Justin

+0

@Kragen: J'ai mis à jour la réponse pour vous donner un exemple complet comment générer le texte désiré sans DOE. –

+0

Merci - Je ne sais pas pourquoi je pensais que ça ne fonctionnait pas, mais cela semble fonctionner pour moi maintenant. – Justin

Questions connexes