string s = "<?xml version=\"1.0\"?> \n" +
"<books xmlns=\"http://www.contoso.com/books\"> \n" +
" <book genre=\"novel\" ISBN=\"1-861001-57-8\" publicationdate=\"1823-01-28\"> \n" +
" <title>Pride And Prejudice</title> \n" +
" <price>24.95</price> \n" +
" <book genre=\"novel\" ISBN=\"1-861002-30-1\" publicationdate=\"1985-01-01\"> \n" +
" <title>The Handmaid's Tale</title> \n" +
" <price>29.95</price> \n" +
public static void Main()
Program p =new Program();
Console.WriteLine("Hello World");
var xmlReader = XmlReader.Create(new StringReader(p.GetXML()));
var xmlString = p.Reader(xmlReader);
public string Reader(XmlReader xmlTextReader)
var stringBuilder = new StringBuilder();
while (xmlTextReader.Read())
switch (xmlTextReader.NodeType)
case XmlNodeType.Element:
if (xmlTextReader.IsEmptyElement)
stringBuilder.Append("<").Append(xmlTextReader.Name);
while (xmlTextReader.MoveToNextAttribute())
stringBuilder.Append(" ").Append(xmlTextReader.Name).Append("='")
.Append(EscapeCharacters(xmlTextReader.Value)).Append("'");
stringBuilder.AppendLine(tag);
stringBuilder.AppendLine(EscapeCharacters(xmlTextReader.Value));
case XmlNodeType.EndElement:
stringBuilder.AppendLine("</" + xmlTextReader.Name + ">");
case XmlNodeType.Attribute:
stringBuilder.AppendLine(EscapeCharacters(xmlTextReader.Value));
case XmlNodeType.EntityReference:
case XmlNodeType.ProcessingInstruction:
case XmlNodeType.Comment:
case XmlNodeType.Document:
case XmlNodeType.DocumentType:
case XmlNodeType.DocumentFragment:
case XmlNodeType.Notation:
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
case XmlNodeType.EndEntity:
case XmlNodeType.XmlDeclaration:
throw new ArgumentOutOfRangeException();
return stringBuilder.ToString();
private static string EscapeCharacters(string value)
if (string.IsNullOrEmpty(value))
foreach (var escapeChar in EscapeCharactersMap)
value = value.Replace(escapeChar.Key, escapeChar.Value);