XmlSimpleDictionaryReader.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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. public override bool HasValue {
  120. get { return reader.HasValue; }
  121. }
  122. public override string Value {
  123. get { return reader.Value; }
  124. }
  125. public override bool IsEmptyElement {
  126. get { return reader.IsEmptyElement; }
  127. }
  128. public override bool IsDefault {
  129. get { return reader.IsDefault; }
  130. }
  131. public override char QuoteChar {
  132. get { return reader.QuoteChar; }
  133. }
  134. public override string XmlLang {
  135. get { return reader.XmlLang; }
  136. }
  137. public override XmlSpace XmlSpace {
  138. get { return reader.XmlSpace; }
  139. }
  140. public override string this [int i] {
  141. get { return reader [i]; }
  142. }
  143. public override string this [string name] {
  144. get { return reader [name]; }
  145. }
  146. public override string this [string localName, string namespaceURI] {
  147. get { return reader [localName, namespaceURI]; }
  148. }
  149. public override bool EOF {
  150. get { return reader.EOF; }
  151. }
  152. public override ReadState ReadState {
  153. get { return reader.ReadState; }
  154. }
  155. public override XmlNameTable NameTable {
  156. get { return reader.NameTable; }
  157. }
  158. public override string GetAttribute (string name)
  159. {
  160. return reader.GetAttribute (name);
  161. }
  162. public override string GetAttribute (string localName, string namespaceURI)
  163. {
  164. return reader.GetAttribute (localName, namespaceURI);
  165. }
  166. public override string GetAttribute (int i)
  167. {
  168. return reader.GetAttribute (i);
  169. }
  170. public override bool MoveToAttribute (string name)
  171. {
  172. return reader.MoveToAttribute (name);
  173. }
  174. public override bool MoveToAttribute (string localName, string namespaceURI)
  175. {
  176. return reader.MoveToAttribute (localName, namespaceURI);
  177. }
  178. public override void MoveToAttribute (int i)
  179. {
  180. reader.MoveToAttribute (i);
  181. }
  182. public override bool MoveToFirstAttribute ()
  183. {
  184. return reader.MoveToFirstAttribute ();
  185. }
  186. public override bool MoveToNextAttribute ()
  187. {
  188. return reader.MoveToNextAttribute ();
  189. }
  190. public override bool MoveToElement ()
  191. {
  192. return reader.MoveToElement ();
  193. }
  194. public override void Close ()
  195. {
  196. reader.Close ();
  197. if (onClose != null)
  198. onClose (this);
  199. }
  200. public override bool Read ()
  201. {
  202. if (!reader.Read ())
  203. return false;
  204. dict.Add (reader.Prefix);
  205. dict.Add (reader.LocalName);
  206. dict.Add (reader.NamespaceURI);
  207. if (reader.MoveToFirstAttribute ()) {
  208. do {
  209. dict.Add (reader.Prefix);
  210. dict.Add (reader.LocalName);
  211. dict.Add (reader.NamespaceURI);
  212. dict.Add (reader.Value);
  213. } while (reader.MoveToNextAttribute ());
  214. reader.MoveToElement ();
  215. }
  216. return true;
  217. }
  218. public override string ReadString ()
  219. {
  220. return reader.ReadString ();
  221. }
  222. public override string ReadInnerXml ()
  223. {
  224. return reader.ReadInnerXml ();
  225. }
  226. public override string ReadOuterXml ()
  227. {
  228. return reader.ReadOuterXml ();
  229. }
  230. public override string LookupNamespace (string prefix)
  231. {
  232. return reader.LookupNamespace (prefix);
  233. }
  234. public override void ResolveEntity ()
  235. {
  236. reader.ResolveEntity ();
  237. }
  238. public override bool ReadAttributeValue ()
  239. {
  240. return reader.ReadAttributeValue ();
  241. }
  242. #endregion
  243. }
  244. }