J'ai un peu de XML comme suit:
This is a "description" that I have formatted.
5 Réponses :
Vous pouvez utiliser LINQ pour lire CDATA.
string xml = @"<section> <description> <![CDATA[ This is a ""description"" that I have formatted ]]> </description> </section>"; XPathDocument xDoc = new XPathDocument(new StringReader(xml.Trim())); XPathNavigator nav = xDoc.CreateNavigator(); XPathNavigator descriptionNode = nav.SelectSingleNode("/section/description"); string desiredValue = Regex.Replace(descriptionNode.Value .Replace(Environment.NewLine, String.Empty) .Trim(), @"\s+", " ");
Merci, mais j'aurais dû être plus précis que je le fais dans 2,0 sur le cadre compact. Je pourrais envisager de voir si cela serait plus avantageux de passer à 3,5 à l'avenir.
J'ai édité avec une autre idée. Je n'ai pas .net 2.0 cf installé cependant, donc je ne suis pas sûr que c'est compatible.
@JIM SCHUBERT Voulez-vous inclure des parenthèses après "descendantNodes", par exemple: "xdoc.descendantNodes (). Detype
@Anthony: Bien sûr, monsieur! Merci de le pointer. J'ai mis à jour la réponse avec la correction!
Les blocs de CDATA sont effectivement verbatim. Tout blancheur à l'intérieur de CDATA est significatif, par définition, selon la spécification XML. Par conséquent, vous obtenez ce blanc lorsque vous récupérez la valeur du nœud. Si vous souhaitez le dépouiller à l'aide de vos propres règles (puisque XML Spec ne spécifie aucune façon standard de stripping Whitpace dans CDATA), vous devez le faire vous-même, en utilisant string.replace code>,
,
Regex.replace Code> etc. au besoin. P>
En fait, je pense que c'est très simple. La section Le code ressemblera à p> CDATA code> Il sera chargé dans le
xmldocument code> comme un autre
xmlnode code> la différence est que ce nœud va avoir la propriété Nadetype = CDATA, Qui signifie si vous avez le
xmlnode nœud = doc.selectSingLenode ("section / description"); code> que le nœud aura un
enfantNode code> avec le
innertext code > La propriété a rempli les données pures et vous souhaitez supprimer les caractères spéciaux d'utiliser simplement
couper () code> et vous aurez les données.
XmlNode cDataNode = doc.SelectSingleNode("section/description").ChildNodes[0];
string finalData = cDataNode.InnerText.Trim();
Je pense que le meilleur moyen est de ...
XmlCDataSection cDataNode = (XmlCDataSection)(doc.SelectSingleNode("section/description").ChildNodes[0]); string finalData = cDataNode.Data;
Certainement la meilleure solution, courte, pas de conversions de chaîne impliquées et utilisant les méthodes existantes System.xML.
une forme plus simple de @ Solution de Franky : le Valeur Code> Propriété est équivalent à la propriété CODE> DATA CODE> de la zone CASTED
XMLCDatasection CODE> TYPE. P> P>
La valeur est bien ici aussi;