public static void Main(string[] args)
var rs = new XmlReaderSettings
var ws = new XmlWriterSettings
OmitXmlDeclaration = true,
using (var reader = XmlReader.Create(new StringReader(xml), rs))
using (var writer = XmlWriter.Create(Console.Out, ws))
case XmlNodeType.Element:
var subTreeReader = reader.ReadSubtree();
if (HandleElement(reader, writer))
ReadToEnd(subTreeReader);
writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
writer.WriteAttributes(reader, true);
if (reader.IsEmptyElement)
writer.WriteEndElement();
writer.WriteString(reader.Value);
case XmlNodeType.Whitespace:
case XmlNodeType.SignificantWhitespace:
writer.WriteWhitespace(reader.Value);
writer.WriteCData(reader.Value);
case XmlNodeType.EntityReference:
writer.WriteEntityRef(reader.Name);
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
writer.WriteProcessingInstruction(reader.Name, reader.Value);
case XmlNodeType.DocumentType:
writer.WriteDocType(reader.Name, reader.GetAttribute("PUBLIC"), reader.GetAttribute("SYSTEM"), reader.Value);
case XmlNodeType.Comment:
writer.WriteComment(reader.Value);
case XmlNodeType.EndElement:
writer.WriteFullEndElement();
private static void ReadToEnd(XmlReader reader)
private static bool HandleElement(XmlReader reader, XmlWriter writer)
writer.WriteElementString("element", "val1");