2010-11-29 30 views
5

J'essaie de sortir un fragment de code html. Mais j'ai besoin qu'il soit joli imprimé/indenté. Y at-il un moyen de le faire sans utiliser <xsl:text>&#xa;</xsl:text> et <xsl:text>&#9;</xsl:text>?Comment mettre en forme/indenter une sortie d'une transformation XSL

J'ai utilisé la ligne suivante sans aucun résultat.

<xsl:output method="html" indent="yes"/> 

Follwoing est le code C#; Est-ce que quelqu'un connaît un moyen de formater (au moins indenté) la sortie XSLT?

+0

@conqenator: Si vous ne voulez pas utiliser le paramètre de sérialisation 'xsl: output/@ indent' (peut-être parce que ce n'est pas bon dans MSXSL) et que vous ne voulez pas le faire manuellement, il n'y a pas solution dans le cadre de XSLT, mais parce que vous mettez de telles restrictions. –

+0

Pourquoi le vote? –

+1

Vous devrez fournir plus d'informations pour nous permettre de comprendre pourquoi indent = "yes" ne fonctionne pas pour vous. Alors, quel est votre processeur XSLT, comment exactement exécutez-vous la transformation, à quoi exactement transformez-vous (par exemple, un fichier?), Comment regardez-vous le résultat de la transformation? –

Répondre

6

Ne créez pas votre propre XmlTextWriter si vous souhaitez que le processeur XSLT applique la directive xsl: output. Au lieu de cela soit écrire directement dans un fichier ou créer un XmlWriter comme suit:

using (XmlWriter result = XmlWriter.Create(writePath, XSLT.OutputSettings)) 
{ 
     if (isTopLevel) 
     { 
      XSLT.Transform(XMLDocumentForCurrentUser, result); 
     } 
     else 
     { 
      XsltArgumentList xslArg = new XsltArgumentList(); 
      xslArg.AddParam("MenuIndex", "", menuIndex); 
      XSLT.Transform(XMLDocumentForCurrentUser, xslArg, result); 
     } 
} 
+1

+1 Pour la réponse correcte, en plus de l'explication manquante: La transformation sérialise correctement le résultat de sortie, mais la classe XmlWriter ne supprime par défaut le nœud de texte de l'espace blanc que par défaut; vous devez désactiver ce comportement par un paramètre à la classe XmlWriter. –

+0

A travaillé sans faille! Merci! –

+0

Merci! J'étais à la fin de mon esprit en essayant de comprendre pourquoi la sortie n'est pas indentée et cela l'a corrigé. – EM0

3

On connaît des moyens pour l'impression en plus jolie <xsl:output indent="yes"/>.

Un bon endroit pour regarder est Dave Pawson's XSLT FAQ: http://www.dpawson.co.uk/xsl/sect2/pretty.html

Vous pourriez également être intéressé d'avoir un regard sur le code du XPath Visualizer.

+0

OP dit que les paramètres de sérialisation de sortie ne fonctionnent pas avec son processeur XSLT et ne veulent pas utiliser une identification manuelle. –

+0

Je me demandais réellement (et j'espérais que vous étiez autour) tout en postant cette question. :) Oui, j'ai déjà téléchargé Xpath visualizer il y a quelques jours. Merci pour les liens. –

+0

@Alejandro: Cela peut être un problème dans une multitude de cas. La méthode fiable pour l'impression en 3D, en particulier lorsque la transformation doit être exécutée avec différents processeurs XSLT, n'est pas de s'appuyer sur des paramètres d'indentation, mais sur le bricolage. –