Chaining an XmlReader to an XmlWriter : XmlReader « XML « C# / CSharp Tutorial






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();
  }
}








30.5.XmlReader
30.5.1.XmlReader: ReadElementContentAsString
30.5.2.Create XmlReader from Stream
30.5.3.Using XmlReader to read Xml result set from database
30.5.4.XmlReaderSettings and XmlWriterSettings
30.5.5.XmlTextReader in Action
30.5.6.Read Xml output from database
30.5.7.Chaining an XmlReader to an XmlWriter
30.5.8.extends XmlReader to wrap Sql statement
30.5.9.Create the validating reader