4

I'm parsing Xml data which has entries like this:

<item name="UserText" type_name="gh_string" type_code="10">      </item>

I'm supposed to read the 6 spaces as a String, but both the InnerText and InnerXml values of the System.Xml.XmlNode are zero length Strings.

Is there any way I can get at this whitespace data in existing files and what do I need to do in the future to prevent this sort of screw up?

3 Answers 3

4

XML is ignoring that whitespace. If you need to preserve it, you should insert an xml:space="preserve" attribute into your elements. Something like this, which I think is going to preserve your whitespace wherever the XML is consumed.

<item xml:space="preserve" name="UserText" type_name="gh_string" type_code="10">      </item>

Another option that will work with LINQ-to-XML is to use the PreserveWhitespace load option. Example:

XElement element = XElement.Parse(xml, LoadOptions.PreserveWhitespace);

You should also be able wrap the whitespace in a CData tag, haven't tested.

Sign up to request clarification or add additional context in comments.

Comments

4

If you are reading in the xml with an XMLReader just use the XMLReaderSettings with IgnoreWhitespace set to false

XmlReader r = XmlReader.Create("file",new XmlReaderSettings{ IgnoreWhitespace=false;})

1 Comment

Nope, I use System.Xml.XmlDocument.LoadXml()
3

If you use XMLDocument, set XMLDocument.PreserveWhitespace = true before calling Load.

See http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace.aspx

This works for me fine.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.