HTML à l'intérieur de XML CDATA converti avec < et > les crochets
J'ai quelques exemples XML:
<sample><![CDATA[Line 1<br />Line 2<br />Line 3<br />]]></sample>
Je suis à l'aide d'ASP à la sortie de ce document XML à l'aide d'une feuille de style comme:
Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlHttp.open "GET", URLxml, false
xmlHttp.send()
Set xslHttp = Server.CreateObject("Microsoft.XMLHTTP")
xslHttp.open "GET", xXsl, false
xslHttp.send()
Set xmlDoc = Server.CreateObject("MICROSOFT.XMLDOM")
Set xslDoc = Server.CreateObject("MICROSOFT.XMLDOM")
xmlDoc.async = false
xslDoc.async = false
xmlDoc.Load xmlHttp.responseXML
xslDoc.Load xslHttp.responseXML
Response.Write xmlDoc.transformNode(xslDoc)
Cependant, une fois que c'est arriver écrite, la sortie HTML s'affiche comme:
Line 1<br />Line 2<br />Line 3
Je peux voir que l'ASP est de convertir les crochets dans le code, mais je ne sais pas pourquoi. Toutes les pensées?
- Bonne question, +1. En plus de la bonne explication par @Alejandro, voir ma réponse décrivant la meilleure solution possible au problème.
- +1 question est claire et cherche une réponse définitive - que l'a noté, l'affichage du document XSL pourrait l'aider.
- La partie de la XSL qui est de la sortie de ces données est un simple <xsl:value-of select="exemple"/>.
Vous devez vous connecter pour publier un commentaire.
C'est un
sample
élément avec un nœud de texte enfant.Supposons que vous appliquez une identité transformer. Alors le résultat sera:
Pourquoi? Parce que les nœuds de texte et des valeurs d'attribut ont le caractère spécial
&
,<
et>
s'échapper comme des entités de caractères.MODIFIER: bien sûr, vous pouvez utiliser DOE... Mais, outre le fait que c'est un option, le résultat sera un nœud de texte n'importe quoi (sans le coder des entités de caractères). Vous aurez besoin d'autres analyseur fase (ce qui peut être utile lors de la sortie et de coder le HTML fragment a (X)document HTML comme dans les aliments, avec le risque de la malformation de sortie...).
Cette feuille de style:
De sortie:
Rendu (majoration réelle):
Ligne 1
La Ligne 2
La Ligne 3
<sample><![CDATA[<br />]]></sample>
et<sample><br /></sample>
sont sémantique sur le même. Dans les deux cas, il est un exemple de l'élément dont le contenu est<br />
comme une chaîne de texte, non pas comme un élément. Sortie HTML HTML pour la sérialisation de vos données et même en HTML, il est nécessaire de s'échapper<
caractères.En plus de @Alejandro de l'explication, c'est ici la meilleure solution possible:
Ne jamais mettre de balisage dans un texte (CDATA) nœud.
Au lieu de:
toujours créer:
Rappelez-vous: Mettre de balisage à l'intérieur de la CDATA est en train de perdre il.
Pense que c'est la transformation XSL qui vous cause des problèmes. Vous devriez être en mesure de modifier votre .xsl document pour corriger ce en tant que tel:
Je suis voler cette page sur désactiver la sortie échappement.
Pour l'enregistrement, j'ai la haine XML/XSL - une solution à la recherche d'un problème. En règle générale, si vous avez besoin de traiter avec le balisage j'ai trouvé XML/XSL n'apporte que des problèmes, car souvent vous voulez traiter avec le balisage des fragments, qui sont souvent pas XML valide, de sorte que vous enveloppez CDATA autour d'elle puis hilarité s'ensuit que vous êtes en train de vivre.
Mise à jour
OK, donc le ci-dessus ne fonctionne pas. Bien sûr, ne savait pas ce XSL ressemblait jusqu'commentaire sur la question a été ajoutée. Le code suivant fonctionne (idée de ce fil du forum):
Clé est la
<xsl:output method="text" />
.Aussi, pour le bas de voter, commenter pourquoi.
text
; qui ajoute la nécessité de construire vous-même l'élément de balisage....
est un format incorrect. Deuxièmement, j'ai tendance à penser que l'OP veut sans doute à la sortie plus que juste l'encodage (X)HTML, c'est à dire un emballagep
. Comment voudriez-vous faire cela en préservant votretext
méthode de sortie?