SQL Server XML de sortie avec CDATA
Est-il un moyen d'avoir un Serveur SQL, XML retour utiliser CDATA? J'ai XML retourné par le Serveur SQL comme ceci:
<locations>
<site id="124">
<sitename>Texas A & M</sitename>
</site>
</locations>
Quand je suis dans l'obligation d'avoir cette:
<locations>
<site id="124">
<sitename><![CDATA[Texas A & M]]></sitename>
</site>
</locations>
- Semble comme une exigence étonnante: ils doivent à la fois arrivé à la même chose, en tout conforme aux standards xml parser. Mais alors, les clients seront les clients.
- Malheureusement, le post-traitement n'est pas une option, comme SQL a déjà pris les données de la colonne (Texas A & M) et s'est échappé pour XML (Texas A & M) direct. Quelque chose qui CDATA permet. Le client ne veut pas de parser le XML, puis de la recherche et de réécrire les valeurs. Et j'ai rapidement découvert que le retour XML, plutôt que de faire une requête de retour et de la construction de la chaîne XML à la main, est la préférence certaine.
Vous devez vous connecter pour publier un commentaire.
De voir les options de FOR XML EXPLICIT (paramètre Directive). Il donne le plus grand degré de contrôle et vous pouvez également spécifier CDATA. Voici un bon tutoriel.
Et le code addapted à partir de ce tutoriel:
Comme Joel mentionné dans le commentaire ci-dessus, ces deux formes devraient signifient exactement la même chose. Toutefois, si la CDATA forme est vraiment nécessaire, alors vous pourriez écrire un post-processeur qui prend la première forme comme des entrées et sorties de la deuxième formulaire à l'aide CDATA.
Lors de cette opération, d'un post-processeur serait unencode le XML échappé de données dans le premier formulaire, et de le ré-encoder à l'aide d'une CDATA compatible avec méthode. Voir la question Est-il un moyen d'échapper à une CDATA fin jeton en xml? pour des considérations concernant CDATA s'échapper.
Voici un exemple de ma façon de m'CDATA:
Voici les détails de ma belette comme, CDATA fonction de gestion:
]]>
.<![CDATA[will ]]> this fail?]]>
.no ']]>' in element content
. Donc, je vais écrire cette fonction.