xsl essayant de sortie '<' par opposition à '<'
Mise à jour:
Le problème persiste même si elle n'est pas tout à fait la même qu'avant. Ci-dessous est un exemple de ce qui est entrée, ce qui est de sortie et ce que je veux, sortie
Un exemple de l'entrée:
&lt;p&gt;&lt;span style=&quot;font-size: medium&quot;&gt;Product description text&lt;/span&gt;&lt;/p&gt;
Courant de sortie:
<p><span style="font-size: medium">Product description text</span></p>
De sortie prévue:
<p><span style="font-size: medium">Product description text</span></p>
.
À l'aide CDATA a aidé car elle me permet d'input "< " mais comme on le voit dans la sortie ci-dessus, même lors de l'utilisation de disable-output-escaping, il a changé à la sortie
.
.
Question d'origine:
L'erreur que j'obtiens est "'<', valeur hexadécimale 0x3C, est un attribut non valide caractère"
Ce que je suis en train de faire est de remplacer toutes les occurrences de < ; et > ; par < et > respectivement.
De garder ce aussi simple que possible, voici le code pour lt;:
<xsl:variable name="lt">
<xsl:text><</xsl:text>
</xsl:variable>
<xsl:variable name="lthex">&lt;</xsl:variable>
<xsl:copy-of select="ew:replacestring(products_description/node(),$lthex,$lt)"/>
J'ai essayé plusieurs choses à la place d'un texte, par exemple la valeur de etc.
Je sais il n'y a rien de mal avec le format de code et le code vb liés à elle parce que je l'utilise plusieurs fois afin de remplacer et de sortie d'ailleurs
Le problème c'est que je veux < et >, littéralement, être de sortie, non pas à un code qui est alors vu par le navigateur et changé
.
Si vous avez besoin de plus d'informations il suffit de demander (j'ai du mal à expliquer cela très bien)
Toute aide sera appréciée
- +1 pour la question claire.
- Comment êtes-vous d'appliquer la transformation? Pouvez-vous montrer le XSLT?
Vous devez vous connecter pour publier un commentaire.
C'est parce que
<
est illégal (et c'est pourquoi votre application est en plaindre). Pour>
, vous pouvez utiliser:CDATA
n'est pas vraiment nécessaire. Utilisez simplement<xsl:text disable-output-escaping="yes"><</xsl:text>
.Le problème d'origine
Ce qui vous semble vraiment avoir est double échappé d'entrée de sorte qu'au lieu de simplement en éditant le texte avec
disable-output-escaping="yes"
vous avez besoin de quelques façons de faire de la chaîne de remplacement. Clairement il semble que vous ne le remplacement avecew:replacestring()
fonction d'extension. Le problème est que même si vous parvenez à remplacer&lt;
avec<
, le résultat n'est encore qu'une chaîne de caractères et la<
personnage est échappé sur la production.Original de votre texte de remplacement code n'a pas été bien formé car
<
en tant que telle est considérée comme une balise. À l'aide deou
sont équivalentes et résoudre ce problème. Toutefois, cela n'aide pas le problème que le caractère de remplacement est toujours délivrée comme une entité de référence. À l'aide de
disable-output-escaping="yes"
ici dans la définition de la variable n'a aucun effet sur ce problème.Ces exemples de code ne fonctionne pas car
disable-output-escaping="yes"
n'a d'effet que lorsque la valeur est sérialisé, pas quand une variable est affectée.Un éventuel correctif
Ce que l'on pourrait essayer de faire est de stocker le résultat de votre remplacement de texte dans une variable
et puis la sortie de la valeur de cette variable avec
disable-output-escaping="yes"
Une autre solution sans l'extension des fonctions de
J'ai été en mesure de transformer votre entrée
à cette sortie
avec une version légèrement modifiée de Jeni Tennison sigle du modèle de remplacement. Dans votre cas, le document contenant le sigle titres devrait ressembler à ceci
La modification requise serait de changer cette partie de l'exemple de code
à ressembler à ce
Ce modèle devrait fonctionner dans tous les environnements, parce que c'est XSLT 1.0 et il ne nécessite pas d'extension de fonctions.
Edit: Il semble que vous essayez de prendre une sérialisation d'un XML ou HTML sérialisation comme entrée à la place d'un XML ou HTML sérialisation, et s'attendre à la sortie d'un fichier XML ou HTML sérialisation?
La bonne chose serait de fixer votre cassé entrée, mais voir Comment ne pas encoder les caractères XML avec l'aide de XSLT?
Vous avez une sorte de malentendu ici. XSL prend XML en entrée et les sorties HTML ou XML.
<
est représenté comme<
dans sérialisé HTML et XML.Un fichier HTML ou XML qui contient un
<
qui ne démarre pas un tag, c'est une mauvaise sérialisation (pas wellformed).<
est la représentation correcte de<
dans un fichier HTML ou XML.Un fichier HTML ou XML n'est qu'une sérialisation des données qu'il représente. C'est, c'est un niveau en dessous de données qu'il représente.
Vous devriez penser à du contenu de l'HTML ou XML en tant que ce que les données représentent (
<
), non pas comme la sérialisation des données (<
).Essayez plutôt d'expliquer pourquoi vous pensez avoir
<
est un problème, afin que nous puissions corriger le malentendu?