XmlParserContext.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. //
  2. // System.Xml.XmlParserContext
  3. //
  4. // Author:
  5. // Jason Diamond ([email protected])
  6. // Atsushi Enomoto ([email protected])
  7. //
  8. // (C) 2001, 2002 Jason Diamond http://injektilo.org/
  9. // (C) 2003 Atsushi Enomoto
  10. //
  11. using System.Collections;
  12. using System.Text;
  13. using Mono.Xml;
  14. namespace System.Xml
  15. {
  16. public class XmlParserContext
  17. {
  18. #region Constructors
  19. public XmlParserContext (
  20. XmlNameTable nt,
  21. XmlNamespaceManager nsMgr,
  22. string xmlLang,
  23. XmlSpace xmlSpace) :
  24. this (
  25. nt,
  26. nsMgr,
  27. null,
  28. null,
  29. null,
  30. null,
  31. null,
  32. xmlLang,
  33. xmlSpace,
  34. null
  35. )
  36. {
  37. }
  38. public XmlParserContext (
  39. XmlNameTable nt,
  40. XmlNamespaceManager nsMgr,
  41. string xmlLang,
  42. XmlSpace xmlSpace,
  43. Encoding enc) :
  44. this (
  45. nt,
  46. nsMgr,
  47. null,
  48. null,
  49. null,
  50. null,
  51. null,
  52. xmlLang,
  53. xmlSpace,
  54. enc
  55. )
  56. {
  57. }
  58. public XmlParserContext (
  59. XmlNameTable nt,
  60. XmlNamespaceManager nsMgr,
  61. string docTypeName,
  62. string pubId,
  63. string sysId,
  64. string internalSubset,
  65. string baseURI,
  66. string xmlLang,
  67. XmlSpace xmlSpace) :
  68. this (
  69. nt,
  70. nsMgr,
  71. docTypeName,
  72. pubId,
  73. sysId,
  74. internalSubset,
  75. baseURI,
  76. xmlLang,
  77. xmlSpace,
  78. null
  79. )
  80. {
  81. }
  82. public XmlParserContext (
  83. XmlNameTable nt,
  84. XmlNamespaceManager nsMgr,
  85. string docTypeName,
  86. string pubId,
  87. string sysId,
  88. string internalSubset,
  89. string baseURI,
  90. string xmlLang,
  91. XmlSpace xmlSpace,
  92. Encoding enc)
  93. : this (
  94. nt,
  95. nsMgr,
  96. (docTypeName != null && docTypeName != String.Empty) ?
  97. new XmlTextReader ("", nt).GenerateDTDObjectModel (
  98. docTypeName, pubId, sysId, internalSubset) : null,
  99. baseURI,
  100. xmlLang,
  101. xmlSpace,
  102. enc)
  103. {
  104. }
  105. internal XmlParserContext (XmlNameTable nt,
  106. XmlNamespaceManager nsMgr,
  107. DTDObjectModel dtd,
  108. string baseURI,
  109. string xmlLang,
  110. XmlSpace xmlSpace,
  111. Encoding enc)
  112. {
  113. if (nt == null)
  114. this.nameTable = nsMgr == null ? new NameTable () : nsMgr.NameTable;
  115. else
  116. this.nameTable = nt;
  117. this.namespaceManager = nsMgr != null ? nsMgr : new XmlNamespaceManager (nameTable);
  118. if (dtd != null) {
  119. this.docTypeName = dtd.Name;
  120. this.publicID = dtd.PublicId;
  121. this.systemID = dtd.SystemId;
  122. this.internalSubset = dtd.InternalSubset;
  123. this.dtd = dtd;
  124. }
  125. this.encoding = enc;
  126. baseURIStack = new Stack ();
  127. xmlLangStack = new Stack ();
  128. xmlSpaceStack = new Stack ();
  129. baseURIStack.Push (baseURI != null ? baseURI : String.Empty);
  130. xmlLangStack.Push (xmlLang);
  131. xmlSpaceStack.Push (xmlSpace);
  132. }
  133. #endregion
  134. #region Fields
  135. private string baseURI;
  136. private string docTypeName;
  137. private Encoding encoding;
  138. private string internalSubset;
  139. private XmlNamespaceManager namespaceManager;
  140. private XmlNameTable nameTable;
  141. private string publicID;
  142. private string systemID;
  143. private string xmlLang;
  144. private XmlSpace xmlSpace;
  145. private Stack baseURIStack;
  146. private Stack xmlLangStack;
  147. private Stack xmlSpaceStack;
  148. private DTDObjectModel dtd;
  149. #endregion
  150. #region Properties
  151. public string BaseURI {
  152. get { return baseURI != null ? baseURI : baseURIStack.Peek () as string; }
  153. set { baseURI = value; }
  154. }
  155. public string DocTypeName {
  156. get { return docTypeName != null ? docTypeName : dtd != null ? dtd.Name : null; }
  157. set { docTypeName = value; }
  158. }
  159. internal DTDObjectModel Dtd {
  160. get { return dtd; }
  161. set { dtd = value; }
  162. }
  163. public Encoding Encoding {
  164. get { return encoding; }
  165. set { encoding = value; }
  166. }
  167. public string InternalSubset {
  168. get { return internalSubset != null ? internalSubset : dtd != null ? dtd.InternalSubset : null; }
  169. set { internalSubset = value; }
  170. }
  171. public XmlNamespaceManager NamespaceManager {
  172. get { return namespaceManager; }
  173. set { namespaceManager = value; }
  174. }
  175. public XmlNameTable NameTable {
  176. get { return nameTable; }
  177. set { nameTable = value; }
  178. }
  179. public string PublicId {
  180. get { return publicID != null ? publicID : dtd != null ? dtd.PublicId : null; }
  181. set { publicID = value; }
  182. }
  183. public string SystemId {
  184. get { return systemID != null ? systemID : dtd != null ? dtd.SystemId : null; }
  185. set { systemID = value; }
  186. }
  187. public string XmlLang {
  188. get { return xmlLang != null ? xmlLang : xmlLangStack.Peek () as string; }
  189. set { xmlLang = value; }
  190. }
  191. public XmlSpace XmlSpace {
  192. get { return xmlSpace != XmlSpace.None ? xmlSpace : (XmlSpace) xmlSpaceStack.Peek (); }
  193. set { xmlSpace = value; }
  194. }
  195. #endregion
  196. #region Methods
  197. internal void PushScope ()
  198. {
  199. baseURIStack.Push (BaseURI);
  200. xmlLangStack.Push (XmlLang);
  201. xmlSpaceStack.Push (XmlSpace);
  202. baseURI = null;
  203. xmlLang = null;
  204. xmlSpace = XmlSpace.None;
  205. }
  206. internal void PopScope ()
  207. {
  208. baseURIStack.Pop ();
  209. xmlLangStack.Pop ();
  210. xmlSpaceStack.Pop ();
  211. baseURI = null;
  212. xmlLang = null;
  213. xmlSpace = XmlSpace.None;
  214. }
  215. #endregion
  216. }
  217. }