Initial Commit
This commit is contained in:
99
iTechSharp/iTextSharp/text/xml/ParserBase.cs
Normal file
99
iTechSharp/iTextSharp/text/xml/ParserBase.cs
Normal file
@@ -0,0 +1,99 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.Collections;
|
||||
|
||||
namespace iTextSharp.text.xml
|
||||
{
|
||||
/// <summary>
|
||||
/// The <CODE>ParserBase</CODE>-class provides XML document parsing.
|
||||
/// </summary>
|
||||
public abstract class ParserBase
|
||||
{
|
||||
public void Parse(XmlDocument xDoc) {
|
||||
string xml = xDoc.OuterXml;
|
||||
StringReader stringReader = new StringReader(xml);
|
||||
XmlTextReader reader = new XmlTextReader(stringReader);
|
||||
this.Parse(reader);
|
||||
}
|
||||
|
||||
public void Parse(XmlTextReader reader) {
|
||||
try {
|
||||
while (reader.Read()) {
|
||||
switch (reader.NodeType) {
|
||||
case XmlNodeType.Element:
|
||||
string namespaceURI = reader.NamespaceURI;
|
||||
string name = reader.Name;
|
||||
bool isEmpty = reader.IsEmptyElement;
|
||||
Hashtable attributes = new Hashtable();
|
||||
if (reader.HasAttributes) {
|
||||
for (int i = 0; i < reader.AttributeCount; i++) {
|
||||
reader.MoveToAttribute(i);
|
||||
attributes.Add(reader.Name,reader.Value);
|
||||
}
|
||||
}
|
||||
this.StartElement(namespaceURI, name, name, attributes);
|
||||
if (isEmpty) {
|
||||
EndElement(namespaceURI,
|
||||
name, name);
|
||||
}
|
||||
break;
|
||||
case XmlNodeType.EndElement:
|
||||
EndElement(reader.NamespaceURI,
|
||||
reader.Name, reader.Name);
|
||||
break;
|
||||
case XmlNodeType.Text:
|
||||
Characters(reader.Value, 0, reader.Value.Length);
|
||||
break;
|
||||
// There are many other types of nodes, but
|
||||
// we are not interested in them
|
||||
case XmlNodeType.Whitespace:
|
||||
Characters(reader.Value, 0, reader.Value.Length);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (XmlException e) {
|
||||
Console.WriteLine(e.Message);
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
reader.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Begins the process of processing an XML document
|
||||
/// </summary>
|
||||
/// <param name="url">the XML document to parse</param>
|
||||
public void Parse(string url) {
|
||||
XmlTextReader reader = null;
|
||||
reader = new XmlTextReader(url);
|
||||
this.Parse(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method gets called when a start tag is encountered.
|
||||
/// </summary>
|
||||
/// <param name="uri"></param>
|
||||
/// <param name="lname"></param>
|
||||
/// <param name="name">the name of the tag that is encountered</param>
|
||||
/// <param name="attrs">the list of attributes</param>
|
||||
public abstract void StartElement(String uri, String lname, String name, Hashtable attrs);
|
||||
|
||||
/// <summary>
|
||||
/// This method gets called when an end tag is encountered.
|
||||
/// </summary>
|
||||
/// <param name="uri"></param>
|
||||
/// <param name="lname"></param>
|
||||
/// <param name="name">the name of the tag that ends</param>
|
||||
public abstract void EndElement(String uri, String lname, String name);
|
||||
|
||||
/// <summary>
|
||||
/// This method gets called when characters are encountered.
|
||||
/// </summary>
|
||||
/// <param name="content">an array of characters</param>
|
||||
/// <param name="start">the start position in the array</param>
|
||||
/// <param name="length">the number of characters to read from the array</param>
|
||||
public abstract void Characters(string content, int start, int length);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user