2010-02-05 5 views
6

Que dois-je faire dans mon code C# ou dans mon document XML pour que l'analyseur XDocument lit les espaces littéraux pour Value s de XElement s?Comment préserver les caractères d'espaces lors de l'analyse XML à partir de C# LINQ


Contexte

J'ai un document XML, dont une partie ressemble à ceci:

<NewLineString>&#10;&#13;</NewLineString> 
    <IndentString> </IndentString> 

J'ajoute les valeurs de chaque XELement à un dictionnaire de données en utilisant un LINQ question; la partie .ForEach ressemble à ceci:

.ForEach(x => SchemaDictionary.Add(
     LogicHelper.GetEnumValue(x.Name.ToString()), x.Value));  

Pour tester pour voir si les valeurs ont été préservées blancs, je l'impression d'une ligne des numéros de caractères de chaque élément de valeur dans le dictionnaire de données. Dans le code suivant, x représente un KeyValuePair et le Aggregate fait simplement une chaîne des valeurs entières de caractères:

x.Value.ToCharArray() 
    .Aggregate<char,string>("",(word,c) => word + ((int)c).ToString() + " ") 
    )); 

Je me attendais à voir 10 13 pour la valeur <NewLineString> et 32 32 32 32 pour la valeur <IndentString>. Cependant, rien n'a été imprimé pour chaque valeur (note: d'autres valeurs d'échappement dans le XML telles que &lt; ont correctement imprimé leurs numéros de caractères).

Que dois-je faire dans mon code C# ou dans mon document XML pour que mon analyseur ajoute la chaîne d'espaces complète au dictionnaire de données?

+0

Comment vous chargez le document XML? –

Répondre

1

Essayez de charger votre document de cette façon.

XmlDocument doc = new XmlDocument(); 
    doc.PreserveWhitespace = true; 
    doc.Load("book.xml"); 
+0

La question originale posée à propos de LINQ ['XDocument's] (http://msdn.microsoft.com/en-us/library/bb345449.aspx), pas System.Xml [' XmlDocument's] (http: // msdn.microsoft.com/en-us/library/6kza7w4k.aspx). Mais [ma recherche sur le Web] (https://www.google.com/search?q=.NET+XML+preserve+whitespace) pour une réponse à propos de 'XmlDocument's m'a lié à cette question, donc cette réponse est utile quand même . –

-3

ou tout simplement modifier votre entrée xml:

<NewLineString>&#10;&#13;</NewLineString> 
<IndentString xml:space="preserve"> </IndentString>