Sax.Net

.NET port of SAX, Simple API for XML. This package provides the core SAX APIs


Keywords
License
LGPL-3.0
Install
Install-Package Sax.Net -Version 2.0.2

Documentation

SAX.Net

SAX.Net is a .NET port of the SAX (http://www.saxproject.org/) Java library.

SAX is the Simple API for XML.

Installation

To install SAX.Net from the NuGet Gallery, run the following in the Package Manager Console

PM> Install-Package SAX.Net

Configuration

<configSections>
  <section name="sax" type="Sax.Net.Helpers.SaxConfigurationSection, Sax.Net"/>
</configSections>
<!-- set either but not both -->
<sax xmlReaderType="" xmlReaderFactoryType=""/>

Usage

A SAX2-compatible XML parser is required e.g. Ælfred.Net or TagSoup.Net for HTML

using System;
using System.IO;

using Sax.Net;
using Sax.Net.Helpers;

public class MySAXApp : DefaultHandler {
  public static void Main(params string[] args) {
    var handler = new MySAXApp();
    IXmlReader parser = XmlReaderFactory.Current.CreateXmlReader();
    parser.ContentHandler = handler;
    parser.ErrorHandler = handler;

    foreach(string fileName in args) {
      using(StreamReader reader = new StreamReader(fileName)) {
        parser.Parse(new InputSource(reader));
      }
    }
  }

  public override void StartDocument() {
    Console.WriteLine("Start document");
  }

  public override void EndDocument() {
    Console.WriteLine("End document");
  }

  public override void StartElement(string uri, string localName, string qName, IAttributes atts) {
    if (string.IsNullOrEmpty(uri)) {
      Console.WriteLine("Start element: {0}", qName);
    } else {
      Console.WriteLine("Start element: {{{0}}}{1}", uri, localName);
    }
  }

  public override void EndElement(string uri, string localName, string qName) {
    if (string.IsNullOrEmpty(uri)) {
      Console.WriteLine("End element: {0}", qName);
    } else {
      Console.WriteLine("End element: {{{0}}}{1}", uri, localName);
    }
  }

  public override void Characters(char[] ch, int start, int length)  {
    Console.Write("Characters:    \"");
    for (int i = start; i < start + length; i++) {
      switch (ch[i]) {
        case '\\':
          Console.Write("\\\\");
          break;
        case '"':
          Console.Write("\\\"");
          break;
        case '\n':
          Console.Write("\\n");
          break;
        case '\r':
          Console.Write("\\r");
          break;
        case '\t':
          Console.Write("\\t");
          break;
        default:
          Console.Write(ch[i]);
          break;
      }
    }
    Console.Write("\"\n");
  }
}

Given the following input:

<?xml version="1.0"?>

<poem xmlns="http://www.megginson.com/ns/exp/poetry">
<title>Roses are Red</title>
<l>Roses are red,</l>
<l>Violets are blue;</l>
<l>Sugar is sweet,</l>
<l>And I love you.</l>
</poem>

The output would look something like this:

Start document
Start element: {http://www.megginson.com/ns/exp/poetry}poem
Characters:    "\n"
Start element: {http://www.megginson.com/ns/exp/poetry}title
Characters:    "Roses are Red"
End element:   {http://www.megginson.com/ns/exp/poetry}title
Characters:    "\n"
Start element: {http://www.megginson.com/ns/exp/poetry}l
Characters:    "Roses are red,"
End element:   {http://www.megginson.com/ns/exp/poetry}l
Characters:    "\n"
Start element: {http://www.megginson.com/ns/exp/poetry}l
Characters:    "Violets are blue;"
End element:   {http://www.megginson.com/ns/exp/poetry}l
Characters:    "\n"
Start element: {http://www.megginson.com/ns/exp/poetry}l
Characters:    "Sugar is sweet,"
End element:   {http://www.megginson.com/ns/exp/poetry}l
Characters:    "\n"
Start element: {http://www.megginson.com/ns/exp/poetry}l
Characters:    "And I love you."
End element:   {http://www.megginson.com/ns/exp/poetry}l
Characters:    "\n"
End element:   {http://www.megginson.com/ns/exp/poetry}poem
End document

License

SAX.Net is licensed under LGPL V3.