XmlEntity.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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. XmlLinkedNode lastChild;
  35. #endregion
  36. #region Properties
  37. public override string BaseURI {
  38. get { return baseUri; }
  39. }
  40. public override string InnerText {
  41. get { return base.InnerText; }
  42. set { throw new InvalidOperationException ("This operation is not supported."); }
  43. }
  44. public override string InnerXml {
  45. get { return base.InnerXml; }
  46. set { throw new InvalidOperationException ("This operation is not supported."); }
  47. }
  48. public override bool IsReadOnly {
  49. get { return true; } // always read-only.
  50. }
  51. public override string LocalName {
  52. get { return name; }
  53. }
  54. public override string Name {
  55. get { return name; }
  56. }
  57. public override XmlNodeType NodeType {
  58. get { return XmlNodeType.Entity; }
  59. }
  60. public string NotationName {
  61. get {
  62. if (NDATA == null)
  63. return null;
  64. else
  65. return NDATA;
  66. }
  67. }
  68. public override string OuterXml {
  69. get { return String.Empty; }
  70. }
  71. public string PublicId {
  72. get {
  73. if (publicId == null)
  74. return null;
  75. else
  76. return publicId;
  77. }
  78. }
  79. public string SystemId {
  80. get {
  81. if (publicId == null)
  82. return null;
  83. else
  84. return systemId;
  85. }
  86. }
  87. #endregion
  88. #region Methods
  89. public override XmlNode CloneNode (bool deep)
  90. {
  91. throw new InvalidOperationException ("This operation is not supported.");
  92. }
  93. public override void WriteContentTo (XmlWriter w)
  94. {
  95. // No effect.
  96. }
  97. public override void WriteTo (XmlWriter w)
  98. {
  99. // No effect.
  100. }
  101. internal void SetEntityContent ()
  102. {
  103. if (FirstChild != null)
  104. return;
  105. XmlDocumentType doctype = OwnerDocument.DocumentType;
  106. if (doctype == null)
  107. return;
  108. DTDEntityDeclaration decl = doctype.DTD.EntityDecls [name];
  109. if (decl == null)
  110. return;
  111. XmlNameTable nt = this.OwnerDocument.NameTable;
  112. XmlNamespaceManager nsmgr = this.ConstructNamespaceManager ();
  113. XmlParserContext ctx = new XmlParserContext (OwnerDocument.NameTable, nsmgr,
  114. doctype != null ? doctype.DTD : null,
  115. BaseURI, XmlLang, XmlSpace, null);
  116. XmlTextReader xmlReader = new XmlTextReader (decl.EntityValue, XmlNodeType.Element, ctx);
  117. xmlReader.XmlResolver = OwnerDocument.Resolver;
  118. do {
  119. XmlNode n = OwnerDocument.ReadNode (xmlReader);
  120. if(n == null) break;
  121. InsertBefore (n, null, false, false);
  122. } while (true);
  123. }
  124. #endregion
  125. }
  126. }