Mega Code Archive

 
Categories / C# Tutorial / XML
 

Chaining an XmlReader to an XmlWriter

using System; using System.Xml;  using System.IO; using System.Text; public class Test2{   static string ipKey;   static string httpMethodKey;   static string fileKey;    static string dateKey;   static string referrerKey;    public static void WriteAttributes(XmlReader reader, XmlWriter writer){          if(reader.MoveToFirstAttribute()){       do{         writer.WriteAttributeString(reader.Prefix,                  reader.LocalName,                  reader.NamespaceURI,                 reader.Value);        }while(reader.MoveToNextAttribute());       reader.MoveToElement();      }   }   public static void WriteEvent(XmlWriter writer, string ip){          writer.WriteStartElement("event");      writer.WriteElementString("ip", ip);     writer.WriteEndElement();    }    public static void ReadEvent(XmlReader reader, out string ip){     ip = null;      while( reader.Read() && reader.NodeType != XmlNodeType.EndElement){                         if (reader.NodeType == XmlNodeType.Element) {                 if(reader.Name == ipKey){           ip = reader.ReadString();       }     }//while      }   public static void Main(string[] args){     string ip;      XmlNameTable xnt = new NameTable();      ipKey            = xnt.Add("ip");           //load XmlTextReader using XmlNameTable above      XmlTextReader xr = new XmlTextReader("logfile.xml", xnt);     xr.WhitespaceHandling = WhitespaceHandling.Significant;     XmlValidatingReader vr = new XmlValidatingReader(xr);     vr.ValidationType = ValidationType.None;     vr.EntityHandling = EntityHandling.ExpandEntities;      StreamWriter sw =  new StreamWriter ("logfile-archive.xml", false, Encoding.UTF8 );      XmlWriter xw    = new XmlTextWriter (sw);                           vr.MoveToContent();     xw.WriteStartElement(vr.Prefix, vr.LocalName, vr.NamespaceURI);     WriteAttributes(vr, xw);               vr.Read();      do     {       ReadEvent(vr, out ip);       WriteEvent(xw,ip);        vr.Read();      } while(vr.NodeType == XmlNodeType.Element);               vr.Close();     xw.Close();   } }