Remplacez \r\n les retours à la ligne à l'aide de XSLT et .NET C# VS 2008
J'utilise VS 2008, .net 3.5 pour générer la page html à l'aide de XSLT.
J'ai un Message, qui contient \r\n (les retours à la ligne)
Je utiliser ce fichier XSL:
<b>Message: </b><xsl:value-of select="Message"/><br/>
J'ai besoin de remplacer \r\n par <br/>
en xsl. J'ai vu plusieurs références, mais pas de solution pour mon problème:
J'utilise ce code C# avant que j'appelle de transformation XSLT, mais pas à droite:
m = m.Replace(@"\r\n", "
");
m = m.Replace(@"\n", "
");
//m = System.Web.HttpUtility.HtmlDecode(m);
m = m.Replace(@"\r\n", "<br/>");
m = m.Replace(@"\n", "<br/>");
msg = "<Exception>"
+ "<Description>" + d + "</Description>"
+ "<Message>" + m + "</Message>"
+ "<DateTime>" + localTimeString + "</DateTime>"
+ "</Exception>";
- Je utiliser cette référence, mais pas de solution
L'interprétation des retours à la ligne avec xsl:text?
XSLT Remplacer la fonction n'est pas trouvé
La fonction de remplacement n'est disponible que dans la version de XSLT 2.0, pas dans la version 1.0 qui est ce que Visual Studio. Juste parce que vous avez spécifié version="2.0" ne veut pas dire que Visual Studio prend en charge.
- Je utiliser cela comme la dernière référence, mais j'obtiens l'erreur:
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="Message"/>
<xsl:with-param name="replace" select="\r\n"/>
<xsl:with-param name="by" select="<br/>"/>
</xsl:call-template>
suggestions, aucun exemple de code fonctionne ?
OriginalL'auteur Kiquenet | 2010-08-22
Vous devez vous connecter pour publier un commentaire.
Le modèle d'appel ci-dessus semble OK, vous avez juste besoin de modèle pour aller avec elle!
Remarque le hack avec la définition d'un CRLF à partir du texte de la feuille de style - NE PAS faire de retrait de ce texte, sinon l'approche la pause! Aussi - je suis sur Linux donc si vous le couper-coller à partir de cette réponse, vous ne pourriez pas obtenir le plein CRLF
Cette façon de définir la "nouvelle ligne" n'est pas bonne, précisément parce que ces tiret restriction. Le moyen efficace de déclarer cette variable serait:
<xsl:variable name="crlf" select="'
'"/>
J'ai combiné user357812 de la suggestion et a baissé les variables et obtenu ceci: <xsl:template name="crlf-remplacer"> <xsl:param name="sujet"/> <xsl:choose> <xsl:when test="contains($sujet," 
')"> <xsl:value-of select="substring-before($subject, '
')"/> <br/> <xsl:call-template name="crlf-remplacer"> <xsl:with-param name="objet" select="substring-after($sujet," 
')"/> </xsl:call-template> </xsl:when> <xsl:autrement> <xsl:value-of select="$sujet"/> </xsl:autrement> </xsl:choose> </xsl:template>
OriginalL'auteur Robin
Il y a deux problèmes ici:
Vous ne devriez pas essayer de remplacer CRLF -- une chaîne n'est pas présente dans le texte. La raison pour cela est que tout conforme à XML parser normalise les nœuds de texte en remplaçant les CR+LF combinaison avec un seul LF (


). Le Spécification W3C XML dit:"Pour simplifier les tâches des applications, où un externe analysé entité ou le littérale valeur entité d'un interne de l'entité analysée contient soit le littéral séquence de deux caractères "#xD#xA" ou autonome littérale #xD, un processeur XML doit passer à la demande, le caractère unique #xA. (Ce comportement peut facilement être produite par l'uniformisation de tous les sauts de ligne à #xA sur l'entrée, avant l'analyse.) "
Le remplacement ne doit pas être une chaîne de. Il doit être un nœud --
<br />
.La résolution de ces deux problèmes est simple:
lorsque cette transformation est appliquée sur ce document XML:
le voulait, résultat correct est produit:
OriginalL'auteur Dimitre Novatchev
J'ai dû écrire des données de base de données dans un fichier xml et de le lire à partir du fichier xml, à l'aide de LINQ to XML. Certains champs dans un enregistrement ont été eux-mêmes des chaînes xml complet avec les caractères \r. Celles-ci avaient restée intacte. J'ai passé des jours à essayer de trouver quelque chose qui pourrait fonctionner, mais il semble que Microsoft a été par la conception de la conversion \r \n.
La solution suivante fonctionne pour moi:
À écrire un chargé XDocument le fichier XML en gardant \r intacte, où xDoc est un XDocument et cheminfichier est une chaîne de caractères:
Pour lire un fichier XML en un XElement garder \r intacte:
OriginalL'auteur CMarsden