Как сохранить пробельные символы при разборе XML из C # LINQ - PullRequest
6 голосов
/ 05 февраля 2010

Что мне нужно сделать в моем коде C # или в моем XML-документе, чтобы синтаксический анализатор XDocument считывал буквальные пробелы в течение Value с XElement с?


Фон

У меня есть XML-документ, часть которого выглядит следующим образом:

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

Я добавляю значения каждого XELement в словарь данных, используя запрос LINQ; .ForEach часть выглядит так:

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

Чтобы проверить, сохранились ли значения пробелов, я распечатываю строку номеров символов каждого элемента значения в словаре данных. В следующем коде x представляет KeyValuePair, а Aggregate просто создает строку из целочисленных значений символов:

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

Я ожидал увидеть 10 13 для значения <NewLineString> и 32 32 32 32 для значения <IndentString>. Однако для каждого значения ничего не печаталось ( примечание: другие экранированные значения в XML, такие как &lt;, правильно печатали свои номера символов ).

Что мне нужно сделать в моем коде C # или в моем XML-документе, чтобы мой анализатор добавил полную строку пробелов в словарь данных?

Ответы [ 3 ]

8 голосов
/ 05 февраля 2010

Попробуйте загрузить XDocument с помощью LoadOptions.PreserveWhitespace

1 голос
/ 05 февраля 2010

Попробуйте загрузить документ таким способом.

XmlDocument doc = new XmlDocument();
    doc.PreserveWhitespace = true;
    doc.Load("book.xml");
0 голосов
/ 13 мая 2011

или просто измените введенный XML-код на:

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