ConfigXmlDocument.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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. Load (reader);
  60. reader.Close ();
  61. }
  62. public string Filename
  63. {
  64. get {
  65. return fileName;
  66. }
  67. }
  68. public int LineNumber
  69. {
  70. get {
  71. return lineNumber;
  72. }
  73. }
  74. //
  75. // Wrappers for Xml* that just provide file name and line number addition
  76. //
  77. class ConfigXmlAttribute : XmlAttribute, IConfigXmlNode
  78. {
  79. string fileName;
  80. int lineNumber;
  81. public ConfigXmlAttribute (ConfigXmlDocument document,
  82. string prefix,
  83. string localName,
  84. string namespaceUri)
  85. : base (prefix, localName, namespaceUri, document)
  86. {
  87. fileName = document.Filename;
  88. lineNumber = document.LineNumber;
  89. }
  90. public string Filename
  91. {
  92. get {
  93. return fileName;
  94. }
  95. }
  96. public int LineNumber
  97. {
  98. get {
  99. return lineNumber;
  100. }
  101. }
  102. }
  103. class ConfigXmlCDataSection : XmlCDataSection, IConfigXmlNode
  104. {
  105. string fileName;
  106. int lineNumber;
  107. public ConfigXmlCDataSection (ConfigXmlDocument document, string data)
  108. : base (data, document)
  109. {
  110. fileName = document.Filename;
  111. lineNumber = document.LineNumber;
  112. }
  113. public string Filename
  114. {
  115. get {
  116. return fileName;
  117. }
  118. }
  119. public int LineNumber
  120. {
  121. get {
  122. return lineNumber;
  123. }
  124. }
  125. }
  126. class ConfigXmlComment : XmlComment, IConfigXmlNode
  127. {
  128. string fileName;
  129. int lineNumber;
  130. public ConfigXmlComment (ConfigXmlDocument document, string comment)
  131. : base (comment, document)
  132. {
  133. fileName = document.Filename;
  134. lineNumber = document.LineNumber;
  135. }
  136. public string Filename
  137. {
  138. get {
  139. return fileName;
  140. }
  141. }
  142. public int LineNumber
  143. {
  144. get {
  145. return lineNumber;
  146. }
  147. }
  148. }
  149. class ConfigXmlElement : XmlElement, IConfigXmlNode
  150. {
  151. string fileName;
  152. int lineNumber;
  153. public ConfigXmlElement (ConfigXmlDocument document,
  154. string prefix,
  155. string localName,
  156. string namespaceUri)
  157. : base (prefix, localName, namespaceUri, document)
  158. {
  159. fileName = document.Filename;
  160. lineNumber = document.LineNumber;
  161. }
  162. public string Filename
  163. {
  164. get {
  165. return fileName;
  166. }
  167. }
  168. public int LineNumber
  169. {
  170. get {
  171. return lineNumber;
  172. }
  173. }
  174. }
  175. class ConfigXmlText : XmlText, IConfigXmlNode
  176. {
  177. string fileName;
  178. int lineNumber;
  179. public ConfigXmlText (ConfigXmlDocument document, string data)
  180. : base (data, document)
  181. {
  182. fileName = document.Filename;
  183. lineNumber = document.LineNumber;
  184. }
  185. public string Filename
  186. {
  187. get {
  188. return fileName;
  189. }
  190. }
  191. public int LineNumber
  192. {
  193. get {
  194. return lineNumber;
  195. }
  196. }
  197. }
  198. }
  199. }