XmlSimpleDictionaryReader.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. namespace System.Xml
  5. {
  6. internal class XmlSimpleDictionaryReader :
  7. XmlDictionaryReader, IXmlLineInfo, IXmlNamespaceResolver
  8. {
  9. XmlDictionary dict;
  10. XmlReader reader;
  11. XmlDictionaryReader as_dict_reader;
  12. IXmlLineInfo as_line_info;
  13. OnXmlDictionaryReaderClose onClose;
  14. public XmlSimpleDictionaryReader (XmlReader reader)
  15. : this (reader, null)
  16. {
  17. }
  18. public XmlSimpleDictionaryReader (XmlReader reader,
  19. XmlDictionary dictionary)
  20. : this (reader, dictionary, null)
  21. {
  22. }
  23. public XmlSimpleDictionaryReader (XmlReader reader,
  24. XmlDictionary dictionary, OnXmlDictionaryReaderClose onClose)
  25. {
  26. this.reader = reader;
  27. this.onClose = onClose;
  28. as_line_info = reader as IXmlLineInfo;
  29. as_dict_reader = reader as XmlDictionaryReader;
  30. if (dictionary == null)
  31. dictionary = new XmlDictionary ();
  32. dict = dictionary;
  33. }
  34. #region IXmlLineInfo
  35. public int LineNumber {
  36. get { return as_line_info != null ? as_line_info.LineNumber : 0; }
  37. }
  38. public int LinePosition {
  39. get { return as_line_info != null ? as_line_info.LinePosition : 0; }
  40. }
  41. public bool HasLineInfo ()
  42. {
  43. return as_line_info != null ? as_line_info.HasLineInfo () : false;
  44. }
  45. #endregion
  46. #region XmlDictionaryReader
  47. public override bool CanCanonicalize {
  48. get { return as_dict_reader != null ? as_dict_reader.CanCanonicalize : false; }
  49. }
  50. public override void EndCanonicalization ()
  51. {
  52. if (as_dict_reader != null)
  53. as_dict_reader.EndCanonicalization ();
  54. else
  55. throw new NotSupportedException ();
  56. }
  57. // no need to override for GetAttribute(), IndexOfLocalName(),
  58. // IsLocalName(), IsNamespaceUri(), IsStartElement()
  59. public override bool TryGetLocalNameAsDictionaryString (
  60. out XmlDictionaryString localName)
  61. {
  62. // FIXME: find out when it returns true.
  63. localName = null;
  64. return false;
  65. // if (!dict.TryLookup (LocalName, out localName))
  66. // return false;
  67. // return true;
  68. }
  69. public override bool TryGetNamespaceUriAsDictionaryString (
  70. out XmlDictionaryString namespaceUri)
  71. {
  72. // FIXME: find out when it returns true.
  73. namespaceUri = null;
  74. return false;
  75. // if (!dict.TryLookup (NamespaceURI, out namespaceUri))
  76. // return false;
  77. // return true;
  78. }
  79. #endregion
  80. #region IXmlNamespaceResolver
  81. public IDictionary<string,string> GetNamespacesInScope (
  82. XmlNamespaceScope scope)
  83. {
  84. IXmlNamespaceResolver nsr = reader as IXmlNamespaceResolver;
  85. return nsr.GetNamespacesInScope (scope);
  86. }
  87. public string LookupPrefix (string ns)
  88. {
  89. IXmlNamespaceResolver nsr = reader as IXmlNamespaceResolver;
  90. return nsr.LookupPrefix (NameTable.Get (ns));
  91. }
  92. #endregion
  93. #region XmlReader
  94. public override int AttributeCount {
  95. get { return reader.AttributeCount; }
  96. }
  97. public override string BaseURI {
  98. get { return reader.BaseURI; }
  99. }
  100. public override int Depth {
  101. get { return reader.Depth; }
  102. }
  103. public override XmlNodeType NodeType
  104. {
  105. get { return reader.NodeType; }
  106. }
  107. public override string Name {
  108. get { return reader.Name; }
  109. }
  110. public override string LocalName {
  111. get { return reader.LocalName; }
  112. }
  113. public override string NamespaceURI {
  114. get { return reader.NamespaceURI; }
  115. }
  116. public override string Prefix {
  117. get { return reader.Prefix; }
  118. }
  119. #if !NET_2_1
  120. public override bool HasValue {
  121. get { return reader.HasValue; }
  122. }
  123. #endif
  124. public override string Value {
  125. get { return reader.Value; }
  126. }
  127. public override bool IsEmptyElement {
  128. get { return reader.IsEmptyElement; }
  129. }
  130. public override bool IsDefault {
  131. get { return reader.IsDefault; }
  132. }
  133. public override char QuoteChar {
  134. get { return reader.QuoteChar; }
  135. }
  136. public override string XmlLang {
  137. get { return reader.XmlLang; }
  138. }
  139. public override XmlSpace XmlSpace {
  140. get { return reader.XmlSpace; }
  141. }
  142. public override string this [int i] {
  143. get { return reader [i]; }
  144. }
  145. public override string this [string name] {
  146. get { return reader [name]; }
  147. }
  148. public override string this [string localName, string namespaceURI] {
  149. get { return reader [localName, namespaceURI]; }
  150. }
  151. public override bool EOF {
  152. get { return reader.EOF; }
  153. }
  154. public override ReadState ReadState {
  155. get { return reader.ReadState; }
  156. }
  157. public override XmlNameTable NameTable {
  158. get { return reader.NameTable; }
  159. }
  160. public override string GetAttribute (string name)
  161. {
  162. return reader.GetAttribute (name);
  163. }
  164. public override string GetAttribute (string localName, string namespaceURI)
  165. {
  166. return reader.GetAttribute (localName, namespaceURI);
  167. }
  168. public override string GetAttribute (int i)
  169. {
  170. return reader.GetAttribute (i);
  171. }
  172. public override bool MoveToAttribute (string name)
  173. {
  174. return reader.MoveToAttribute (name);
  175. }
  176. public override bool MoveToAttribute (string localName, string namespaceURI)
  177. {
  178. return reader.MoveToAttribute (localName, namespaceURI);
  179. }
  180. public override void MoveToAttribute (int i)
  181. {
  182. reader.MoveToAttribute (i);
  183. }
  184. public override bool MoveToFirstAttribute ()
  185. {
  186. return reader.MoveToFirstAttribute ();
  187. }
  188. public override bool MoveToNextAttribute ()
  189. {
  190. return reader.MoveToNextAttribute ();
  191. }
  192. public override bool MoveToElement ()
  193. {
  194. return reader.MoveToElement ();
  195. }
  196. public override void Close ()
  197. {
  198. reader.Close ();
  199. if (onClose != null)
  200. onClose (this);
  201. }
  202. public override bool Read ()
  203. {
  204. if (!reader.Read ())
  205. return false;
  206. dict.Add (reader.Prefix);
  207. dict.Add (reader.LocalName);
  208. dict.Add (reader.NamespaceURI);
  209. if (reader.MoveToFirstAttribute ()) {
  210. do {
  211. dict.Add (reader.Prefix);
  212. dict.Add (reader.LocalName);
  213. dict.Add (reader.NamespaceURI);
  214. dict.Add (reader.Value);
  215. } while (reader.MoveToNextAttribute ());
  216. reader.MoveToElement ();
  217. }
  218. return true;
  219. }
  220. public override string ReadString ()
  221. {
  222. return reader.ReadString ();
  223. }
  224. public override string ReadInnerXml ()
  225. {
  226. return reader.ReadInnerXml ();
  227. }
  228. public override string ReadOuterXml ()
  229. {
  230. return reader.ReadOuterXml ();
  231. }
  232. public override string LookupNamespace (string prefix)
  233. {
  234. return reader.LookupNamespace (prefix);
  235. }
  236. public override void ResolveEntity ()
  237. {
  238. reader.ResolveEntity ();
  239. }
  240. #if !NET_2_1
  241. public override bool ReadAttributeValue ()
  242. {
  243. return reader.ReadAttributeValue ();
  244. }
  245. #endif
  246. #endregion
  247. }
  248. }