Как сохранить пробелы при анализе XML из C# LINQ

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


фон

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

    <NewLineString>

</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 ответов


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


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

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

или просто измените входной xml на:

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