XmlEntity.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //
  2. // System.Xml.XmlEntity.cs
  3. //
  4. // Author:
  5. // Duncan Mak ([email protected])
  6. // Atsushi Enomoto ([email protected])
  7. //
  8. // (C) Ximian, Inc.
  9. // (C) 2004 Novell Inc.
  10. //
  11. using Mono.Xml;
  12. namespace System.Xml
  13. {
  14. public class XmlEntity : XmlNode
  15. {
  16. #region Constructors
  17. internal XmlEntity (string name, string NDATA, string publicId, string systemId,
  18. XmlDocument doc)
  19. : base (doc)
  20. {
  21. this.name = doc.NameTable.Add (name);
  22. this.NDATA = NDATA;
  23. this.publicId = publicId;
  24. this.systemId = systemId;
  25. this.baseUri = doc.BaseURI;
  26. }
  27. #endregion
  28. #region Fields
  29. string name;
  30. string NDATA;
  31. string publicId;
  32. string systemId;
  33. string baseUri;
  34. #endregion
  35. #region Properties
  36. public override string BaseURI {
  37. get { return baseUri; }
  38. }
  39. public override string InnerText {
  40. get { return base.InnerText; }
  41. set { throw new InvalidOperationException ("This operation is not supported."); }
  42. }
  43. public override string InnerXml {
  44. get { return base.InnerXml; }
  45. set { throw new InvalidOperationException ("This operation is not supported."); }
  46. }
  47. public override bool IsReadOnly {
  48. get { return true; } // always read-only.
  49. }
  50. public override string LocalName {
  51. get { return name; }
  52. }
  53. public override string Name {
  54. get { return name; }
  55. }
  56. public override XmlNodeType NodeType {
  57. get { return XmlNodeType.Entity; }
  58. }
  59. public string NotationName {
  60. get {
  61. if (NDATA == null)
  62. return null;
  63. else
  64. return NDATA;
  65. }
  66. }
  67. public override string OuterXml {
  68. get { return String.Empty; }
  69. }
  70. public string PublicId {
  71. get {
  72. if (publicId == null)
  73. return null;
  74. else
  75. return publicId;
  76. }
  77. }
  78. public string SystemId {
  79. get {
  80. if (publicId == null)
  81. return null;
  82. else
  83. return systemId;
  84. }
  85. }
  86. #endregion
  87. #region Methods
  88. public override XmlNode CloneNode (bool deep)
  89. {
  90. throw new InvalidOperationException ("This operation is not supported.");
  91. }
  92. public override void WriteContentTo (XmlWriter w)
  93. {
  94. // No effect.
  95. }
  96. public override void WriteTo (XmlWriter w)
  97. {
  98. // No effect.
  99. }
  100. internal void SetEntityContent ()
  101. {
  102. if (FirstChild != null)
  103. return;
  104. XmlDocumentType doctype = OwnerDocument.DocumentType;
  105. if (doctype == null)
  106. return;
  107. DTDEntityDeclaration decl = doctype.DTD.EntityDecls [name];
  108. if (decl == null)
  109. return;
  110. XmlNameTable nt = this.OwnerDocument.NameTable;
  111. XmlNamespaceManager nsmgr = this.ConstructNamespaceManager ();
  112. XmlParserContext ctx = new XmlParserContext (OwnerDocument.NameTable, nsmgr,
  113. doctype != null ? doctype.DTD : null,
  114. BaseURI, XmlLang, XmlSpace, null);
  115. XmlTextReader xmlReader = new XmlTextReader (decl.EntityValue, XmlNodeType.Element, ctx);
  116. xmlReader.XmlResolver = OwnerDocument.Resolver;
  117. do {
  118. XmlNode n = OwnerDocument.ReadNode (xmlReader);
  119. if(n == null) break;
  120. InsertBefore (n, null, false, false);
  121. } while (true);
  122. }
  123. #endregion
  124. }
  125. }