2010-02-05 7 views
6

Co muszę zrobić w obu mojego kodu C# lub mojego dokumentu XML, tak że parser XDocument odczytuje dosłowne odstępy dla Value s od XElement s?Jak mogę zachować białych znaków podczas analizowania XML z C# LINQ


Tło

Mam dokumentu XML, z których część wygląda następująco:

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

Dodaję wartości każdego XELement do słownika danych przy użyciu LINQ pytanie; .ForEach część wygląda następująco:

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

Aby przetestować, aby sprawdzić, czy zostały zachowane wartości odstępu, jestem drukując linię numerów charakteru każdej pozycji wartości w słowniku danych. W poniższym kodzie x reprezentuje KeyValuePair i Aggregate co jest po prostu ciąg znaków wartości całkowitych:

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

Spodziewałem się zobaczyć 10 13 dla wartości <NewLineString> i 32 32 32 32 dla wartości <IndentString>. Jednak dla każdej wartości nic nie zostało wydrukowane (uwaga: inne wartości zignorowane w pliku XML, takie jak &lt;, prawidłowo wydrukowały swoje numery znaków).

Co muszę zrobić w moim kodzie C# lub moim dokumencie XML, aby mój analizator składni dodał pełny ciąg znaków do słownika danych?

+0

Jak ty załadowaniu dokumentu XML? –

Odpowiedz

1

Spróbuj załadować dokument ten sposób.

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

Pierwotne pytanie dotyczyło LINQ ['XDocument's] (http://msdn.microsoft.com/en-us/library/bb345449.aspx), a nie System.Xml [' XmlDocument's] (http: // msdn.microsoft.com/en-us/library/6kza7w4k.aspx). Ale [moje wyszukiwanie w Internecie] (https://www.google.com/search?q=.NET+XML+preserve+whitespace) w celu uzyskania odpowiedzi dotyczącej 'XmlDocument's linkowało mnie do tego pytania, więc ta odpowiedź i tak jest użyteczna . –

-3

lub po prostu zmodyfikować XML wejściowego:

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