开发者

How do I preserve whitespace characters when parsing XML from C# LINQ

What do I need to do in either my C# code or my XML document so that the XDocument parser reads literal whitespace for Values of XElements?


Background

I have an XML document, part of which looks like this:

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

I'm adding the values of each XELement to a data dictionary using a LINQ query; the .ForEach part looks like this:

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

To test to see if the whitespace values were preserved, I'm printing out a line of the character numbers of each value item in the data dictionary. In the following code, x represents a KeyValuePair and the Aggregate is simply making a string of the character integer values:

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

I expected to see 10 13 for the <NewLineString> value and 32 32 32 32 for the <IndentString> value. However, nothing was printed for each value (note: other escaped values in the XML such as &lt; prin开发者_如何学Pythonted their character numbers correctly).

What do I need to do in either my C# code or my XML document so that my parser adds the complete whitespace string to the Data Dictionary?


Try loading your XDocument with the LoadOptions.PreserveWhitespace


Try loading your document this way.

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


or just modify your input xml to:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜