Décoder la section CDATA en C #
J'ai un peu de XML comme suit:
<section>
<description>
<![CDATA[
This is a "description"
that I have formatted
]]>
</description>
</section>
Je suis d'accéder à l'aide curXmlNode.SelectSingleNode("description").InnerText
mais la valeur renvoie
\r\n C'est une "description"\r\n que j'ai formaté
au lieu de
C'est une "description" que j'ai formaté.
Est-il un moyen simple pour obtenir ce genre de sortie à partir d'une section CDATA? Laissant le réel balise CDATA semble l'avoir de retour de la même manière.
source d'informationauteur Jess
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser Linq pour lire CDATA.
Il est très facile d'obtenir la Valeur de cette façon.
Voici un bon aperçu sur MSDN: http://msdn.microsoft.com/en-us/library/bb308960.aspx
pour .NET 2.0, vous avez probablement juste de passer à travers les Regex:
que les garnitures de votre nœud de valeur, remplace les sauts de lignes vides, et remplace 1+ espaces avec un espace. Je ne pense pas qu'il y ait une autre façon de le faire, compte tenu de la CDATA est de retour significatif des espaces.
Je pense que le meilleur moyen est...
En fait, je pense, est très simple. le
CDATA
section, il sera chargé dans leXmlDocument
comme un autreXmlNode
la différence est que ce nœud va a la propriété NodeType = CDATA, ce qui signifie que si vous avez leXmlNode node = doc.SelectSingleNode("section/description");
ce nœud aura unChildNode
avec leInnerText
bien rempli la pure data, et il n'y a que vous souhaitez supprimer le particulier personnages, l'utilisationTrim()
et vous aurez les données.Le code ressemblera à
Grâce
XOnDaRocks
CDATA blocs sont effectivement verbatim. N'importe quel espace intérieur CDATA est significatif, par définition, en fonction de XML spécification. Par conséquent, vous obtenez que les espaces lorsque vous récupérez la valeur du noeud. Si vous souhaitez supprimer à l'aide de vos propres règles (comme XML spec ne précisez pas la façon standard de décapage des espaces dans CDATA), vous devez le faire vous-même, à l'aide de
String.Replace
Regex.Replace
etc en tant que de besoin.Une forme plus simple de @Franky la solution:
La
Value
propriété est équivalent à laData
propriété de l'couléXmlCDataSection
type.