What do I need to do in either my C# code or my XML document so that the XDocument parser reads literal whitespace for Value
s of XElement
s?
I have an XML document, part of which looks like this:
<NewLineString> </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 <
printed 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?
This behavior is based on the XSLT specification, which defines that the whitespace will be preserved if: An ancestor element of the text node has an xml:space attribute with a value of preserve , and no closer ancestor element has xml:space with a value of default .
Parameter names must be legitimate XML names. A simple attribute value, even that of an xsl:param element's name attribute, may contain whitespace and be perfectly well-formed as XML .
White space is used in XML for readability and has no business meaning. Input XML messages can include line breaks, blanks lines, and spaces between tags (all shown in the following example). If you process XML messages that contain any of these spaces, they are represented as elements in the message tree.
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");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With