I have a simple xml
<data> <node1>value1</node1> <node2>value2</node2> </data>
I am using IXmlSerializable to read and write such xml with DTO. The following code works just fine
XmlReader reader; ... while( reader.Read() ){ Console.Write( reader.ReadElementContentAsString() ); }
However, if spaces are removed in xml, i.e.
<data> <node1>value1</node1><node2>value2</node2> </data>
or I use XmlReaderSettings.IgnoreWhitespace = true; , the code only outputs โvalue1โ, ignoring the second node. When I print the nodes that the parser goes through, I see that ReadElementContentAsString moves the pointer to EndElement from node2 , but I donโt understand why this should happen or how to fix it.
Is this a possible XML parser implementation error?
=================================================
Here is sample code and 2 xml samples that give different results
string homedir = Path.GetDirectoryName(Application.ExecutablePath); string xml = Path.Combine( homedir, "settings.xml" ); FileStream stream = new FileStream( xml, FileMode.Open ); XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.IgnoreWhitespace = false; XmlReader reader = XmlTextReader.Create( stream, readerSettings ); while( reader.Read() ){ if ( reader.MoveToContent() == XmlNodeType.Element && reader.Name != "data" ){ System.Diagnostics.Trace.WriteLine( reader.NodeType + " " + reader.Name + " " + reader.ReadElementContentAsString() ); } } stream.Close();
1.) settings.xml
<?xml version="1.0"?> <data> <node-1>value1</node-1> <node-2>value2</node-2> </data>
2.) settings.xml
<?xml version="1.0"?> <data> <node-1>value1</node-1><node-2>value2</node-2> </data>
using (1) prints
Element node-1 value1 Element node-2 value2
using (2) prints
Element node-1 value1