Simon Fell > Its just code > XmlWriter

Sunday, April 6, 2003

Giulio Piancastelli is using XOM to generate RSS fragments. I use XmlWriter which is one of things I miss most when I'm not coding in .NET
private string makePayload()
{
    const string TUNE_NS = "http://www.pocketsoap.com/weblog/schemas/music/" ;
    const string DC_NS   = "http://purl.org/dc/elements/1.1/" ;
    StringWriter sw = new StringWriter() ;
    XmlTextWriter xw = new XmlTextWriter(sw) ;
    xw.WriteStartElement("item") ;
    xw.WriteElementString("title", title.Text.Trim()) ;
    xw.WriteElementString("description", data.Text.Trim()) ;
    xw.WriteElementString("link", link.Text.Trim()) ;
    DateTime dt = DateTime.Now ;
    if ( date.Text.Length > 0 )
        dt = DateTime.Parse(date.Text) ;
    xw.WriteElementString("date", DC_NS, dt.ToUniversalTime().ToString("s") + "Z" ) ;
    xw.WriteElementString("tune", TUNE_NS, tune.Text.Trim()) ;
    xw.WriteEndElement() ;
    xw.Close() ; 
    return sw.ToString() ;
}
In fact the whole of System.Xml rocks, with one exception, using SAX its trivial to chain a bunch of SAX handlers together to do interesting/extensible things, whilst this is possible with XmlReader and/or XmlWriter, the number of methods in these classes make it cumbersome. To me they need splitting up into a small core interface, and a helper object that provides all the extra functions (most of the functions in XmlWriter are helpers than could be built on top of the core interface).