ConfigXmlDocument.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. //
  2. // System.Configuration.ConfigXmlDocument
  3. //
  4. // Authors:
  5. // Gonzalo Paniagua Javier ([email protected])
  6. //
  7. // (C) 2002 Ximian, Inc (http://www.ximian.com)
  8. //
  9. using System;
  10. using System.IO;
  11. using System.Xml;
  12. namespace System.Configuration
  13. {
  14. public sealed class ConfigXmlDocument : XmlDocument, IConfigXmlNode
  15. {
  16. XmlTextReader reader;
  17. string fileName;
  18. int lineNumber;
  19. public override XmlAttribute CreateAttribute (string prefix,
  20. string localName,
  21. string namespaceUri)
  22. {
  23. return new ConfigXmlAttribute (this, prefix, localName, namespaceUri);
  24. }
  25. public override XmlCDataSection CreateCDataSection (string data)
  26. {
  27. return new ConfigXmlCDataSection (this, data);
  28. }
  29. public override XmlComment CreateComment (string comment)
  30. {
  31. return new ConfigXmlComment (this, comment);
  32. }
  33. public override XmlElement CreateElement (string prefix, string localName, string namespaceUri)
  34. {
  35. return new ConfigXmlElement (this, prefix, localName, namespaceUri);
  36. }
  37. public override XmlSignificantWhitespace CreateSignificantWhitespace (string data)
  38. {
  39. return base.CreateSignificantWhitespace (data);
  40. }
  41. public override XmlText CreateTextNode (string text)
  42. {
  43. return new ConfigXmlText (this, text);
  44. }
  45. public override XmlWhitespace CreateWhitespace (string data)
  46. {
  47. return base.CreateWhitespace (data);
  48. }
  49. public override void Load (string filename)
  50. {
  51. LoadSingleElement (filename, new XmlTextReader (filename));
  52. }
  53. public void LoadSingleElement (string filename, XmlTextReader sourceReader)
  54. {
  55. fileName = filename;
  56. lineNumber = sourceReader.LineNumber;
  57. string xml = sourceReader.ReadOuterXml();
  58. reader = new XmlTextReader (new StringReader (xml), sourceReader.NameTable);
  59. reader.MoveToContent ();
  60. Load (reader);
  61. reader.Close ();
  62. }
  63. public string Filename
  64. {
  65. get {
  66. return fileName;
  67. }
  68. }
  69. public int LineNumber
  70. {
  71. get {
  72. return lineNumber;
  73. }
  74. }
  75. //
  76. // Wrappers for Xml* that just provide file name and line number addition
  77. //
  78. class ConfigXmlAttribute : XmlAttribute, IConfigXmlNode
  79. {
  80. string fileName;
  81. int lineNumber;
  82. public ConfigXmlAttribute (ConfigXmlDocument document,
  83. string prefix,
  84. string localName,
  85. string namespaceUri)
  86. : base (prefix, localName, namespaceUri, document)
  87. {
  88. fileName = document.Filename;
  89. lineNumber = document.LineNumber;
  90. }
  91. public string Filename
  92. {
  93. get {
  94. return fileName;
  95. }
  96. }
  97. public int LineNumber
  98. {
  99. get {
  100. return lineNumber;
  101. }
  102. }
  103. }
  104. class ConfigXmlCDataSection : XmlCDataSection, IConfigXmlNode
  105. {
  106. string fileName;
  107. int lineNumber;
  108. public ConfigXmlCDataSection (ConfigXmlDocument document, string data)
  109. : base (data, document)
  110. {
  111. fileName = document.Filename;
  112. lineNumber = document.LineNumber;
  113. }
  114. public string Filename
  115. {
  116. get {
  117. return fileName;
  118. }
  119. }
  120. public int LineNumber
  121. {
  122. get {
  123. return lineNumber;
  124. }
  125. }
  126. }
  127. class ConfigXmlComment : XmlComment, IConfigXmlNode
  128. {
  129. string fileName;
  130. int lineNumber;
  131. public ConfigXmlComment (ConfigXmlDocument document, string comment)
  132. : base (comment, document)
  133. {
  134. fileName = document.Filename;
  135. lineNumber = document.LineNumber;
  136. }
  137. public string Filename
  138. {
  139. get {
  140. return fileName;
  141. }
  142. }
  143. public int LineNumber
  144. {
  145. get {
  146. return lineNumber;
  147. }
  148. }
  149. }
  150. class ConfigXmlElement : XmlElement, IConfigXmlNode
  151. {
  152. string fileName;
  153. int lineNumber;
  154. public ConfigXmlElement (ConfigXmlDocument document,
  155. string prefix,
  156. string localName,
  157. string namespaceUri)
  158. : base (prefix, localName, namespaceUri, document)
  159. {
  160. fileName = document.Filename;
  161. lineNumber = document.LineNumber;
  162. }
  163. public string Filename
  164. {
  165. get {
  166. return fileName;
  167. }
  168. }
  169. public int LineNumber
  170. {
  171. get {
  172. return lineNumber;
  173. }
  174. }
  175. }
  176. class ConfigXmlText : XmlText, IConfigXmlNode
  177. {
  178. string fileName;
  179. int lineNumber;
  180. public ConfigXmlText (ConfigXmlDocument document, string data)
  181. : base (data, document)
  182. {
  183. fileName = document.Filename;
  184. lineNumber = document.LineNumber;
  185. }
  186. public string Filename
  187. {
  188. get {
  189. return fileName;
  190. }
  191. }
  192. public int LineNumber
  193. {
  194. get {
  195. return lineNumber;
  196. }
  197. }
  198. }
  199. }
  200. }