using System;
using System.Collections;
using System.Collections.Generic;
namespace System.Xml{
internal class XmlSimpleDictionaryReader :
XmlDictionaryReader, IXmlLineInfo, IXmlNamespaceResolver
{
XmlDictionary dict;
XmlReader reader;
XmlDictionaryReader as_dict_reader;
IXmlLineInfo as_line_info;
OnXmlDictionaryReaderClose onClose;
public XmlSimpleDictionaryReader (XmlReader reader)
: this (reader, null)
{
}
public XmlSimpleDictionaryReader (XmlReader reader,
XmlDictionary dictionary)
: this (reader, dictionary, null)
{
}
public XmlSimpleDictionaryReader (XmlReader reader,
XmlDictionary dictionary, OnXmlDictionaryReaderClose onClose)
{
this.reader = reader;
this.onClose = onClose;
as_line_info = reader as IXmlLineInfo;
as_dict_reader = reader as XmlDictionaryReader;
if (dictionary == null)
dictionary = new XmlDictionary ();
dict = dictionary;
}
#region IXmlLineInfo
public int LineNumber {
get { return as_line_info != null ? as_line_info.LineNumber : 0; }
}
public int LinePosition {
get { return as_line_info != null ? as_line_info.LinePosition : 0; }
}
public bool HasLineInfo ()
{
return as_line_info != null ? as_line_info.HasLineInfo () : false;
}
#endregion
#region XmlDictionaryReader
public override bool CanCanonicalize {
get { return as_dict_reader != null ? as_dict_reader.CanCanonicalize : false; }
}
public override void EndCanonicalization ()
{
if (as_dict_reader != null)
as_dict_reader.EndCanonicalization ();
else
throw new NotSupportedException ();
}
// no need to override for GetAttribute(), IndexOfLocalName(),
// IsLocalName(), IsNamespaceUri(), IsStartElement()
public override bool TryGetLocalNameAsDictionaryString (
out XmlDictionaryString localName)
{
// FIXME: find out when it returns true.
localName = null;
return false;
// if (!dict.TryLookup (LocalName, out localName))
// return false;
// return true;
}
public override bool TryGetNamespaceUriAsDictionaryString (
out XmlDictionaryString namespaceUri)
{
// FIXME: find out when it returns true.
namespaceUri = null;
return false;
// if (!dict.TryLookup (NamespaceURI, out namespaceUri))
// return false;
// return true;
}
#endregion
#region IXmlNamespaceResolver
public IDictionary<string,string> GetNamespacesInScope (
XmlNamespaceScope scope)
{
IXmlNamespaceResolver nsr = reader as IXmlNamespaceResolver;
return nsr.GetNamespacesInScope (scope);
}
public string LookupPrefix (string ns)
{
IXmlNamespaceResolver nsr = reader as IXmlNamespaceResolver;
return nsr.LookupPrefix (NameTable.Get (ns));
}
#endregion
#region XmlReader
public override int AttributeCount {
get { return reader.AttributeCount; }
}
public override string BaseURI {
get { return reader.BaseURI; }
}
public override int Depth {
get { return reader.Depth; }
}
public override XmlNodeType NodeType
{
get { return reader.NodeType; }
}
public override string Name {
get { return reader.Name; }
}
public override string LocalName {
get { return reader.LocalName; }
}
public override string NamespaceURI {
get { return reader.NamespaceURI; }
}
public override string Prefix {
get { return reader.Prefix; }
}
public override bool HasValue {
get { return reader.HasValue; }
}
public override string Value {
get { return reader.Value; }
}
public override bool IsEmptyElement {
get { return reader.IsEmptyElement; }
}
public override bool IsDefault {
get { return reader.IsDefault; }
}
public override char QuoteChar {
get { return reader.QuoteChar; }
}
public override string XmlLang {
get { return reader.XmlLang; }
}
public override XmlSpace XmlSpace {
get { return reader.XmlSpace; }
}
public override string this [int i] {
get { return reader [i]; }
}
public override string this [string name] {
get { return reader [name]; }
}
public override string this [string localName, string namespaceURI] {
get { return reader [localName, namespaceURI]; }
}
public override bool EOF {
get { return reader.EOF; }
}
public override ReadState ReadState {
get { return reader.ReadState; }
}
public override XmlNameTable NameTable {
get { return reader.NameTable; }
}
public override string GetAttribute (string name)
{
return reader.GetAttribute (name);
}
public override string GetAttribute (string localName, string namespaceURI)
{
return reader.GetAttribute (localName, namespaceURI);
}
public override string GetAttribute (int i)
{
return reader.GetAttribute (i);
}
public override bool MoveToAttribute (string name)
{
return reader.MoveToAttribute (name);
}
public override bool MoveToAttribute (string localName, string namespaceURI)
{
return reader.MoveToAttribute (localName, namespaceURI);
}
public override void MoveToAttribute (int i)
{
reader.MoveToAttribute (i);
}
public override bool MoveToFirstAttribute ()
{
return reader.MoveToFirstAttribute ();
}
public override bool MoveToNextAttribute ()
{
return reader.MoveToNextAttribute ();
}
public override bool MoveToElement ()
{
return reader.MoveToElement ();
}
public override void Close ()
{
reader.Close ();
if (onClose != null)
onClose (this);
}
public override bool Read ()
{
if (!reader.Read ())
return false;
dict.Add (reader.Prefix);
dict.Add (reader.LocalName);
dict.Add (reader.NamespaceURI);
if (reader.MoveToFirstAttribute ()) {
do {
dict.Add (reader.Prefix);
dict.Add (reader.LocalName);
dict.Add (reader.NamespaceURI);
dict.Add (reader.Value);
} while (reader.MoveToNextAttribute ());
reader.MoveToElement ();
}
return true;
}
public override string ReadString ()
{
return reader.ReadString ();
}
public override string ReadInnerXml ()
{
return reader.ReadInnerXml ();
}
public override string ReadOuterXml ()
{
return reader.ReadOuterXml ();
}
public override string LookupNamespace (string prefix)
{
return reader.LookupNamespace (prefix);
}
public override void ResolveEntity ()
{
reader.ResolveEntity ();
}
public override bool ReadAttributeValue ()
{
return reader.ReadAttributeValue ();
}
#endregion
}
}
|