XmlEntityReference.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // System.Xml.XmlEntityReference.cs
  3. // Author:
  4. // Duncan Mak ([email protected])
  5. //
  6. // (C) Ximian, Inc. http://www.ximian.com
  7. //
  8. using System;
  9. namespace System.Xml
  10. {
  11. public class XmlEntityReference : XmlLinkedNode
  12. {
  13. string entityName;
  14. // Constructor
  15. protected internal XmlEntityReference (string name, XmlDocument doc)
  16. : base (doc)
  17. {
  18. entityName = doc.NameTable.Add (name);
  19. // fetch entity reference value from document dtd
  20. // and add it as a text child to entity reference
  21. string entityValueText = (doc.DocumentType != null) ? doc.DocumentType.DTD.ResolveEntity (name) : null;
  22. if (entityValueText != null && entityValueText.Length > 0) {
  23. XmlNode entityValueNode = new XmlText (entityValueText,doc);
  24. //can't just AppendChild because EntityReference node is always read-only
  25. this.insertBeforeIntern (entityValueNode,null);
  26. }
  27. }
  28. // Properties
  29. public override string BaseURI {
  30. get { return base.BaseURI; }
  31. }
  32. public override bool IsReadOnly {
  33. get { return true; }
  34. }
  35. public override string LocalName {
  36. get { return entityName; } // name of the entity referenced.
  37. }
  38. public override string Name {
  39. get { return entityName; } // name of the entity referenced.
  40. }
  41. public override XmlNodeType NodeType {
  42. get { return XmlNodeType.EntityReference; }
  43. }
  44. public override string Value {
  45. get { return null; } // always return null here.
  46. set {
  47. throw new XmlException ("entity reference cannot be set value.");
  48. }
  49. }
  50. // Methods
  51. public override XmlNode CloneNode (bool deep)
  52. {
  53. // API docs: "The replacement text is not included." XmlNode.CloneNode
  54. // "The replacement text is set when node is inserted." XmlEntityReference.CloneNode
  55. //
  56. return new XmlEntityReference ("", OwnerDocument);
  57. }
  58. public override void WriteContentTo (XmlWriter w)
  59. {
  60. // nothing to write for this object.
  61. }
  62. public override void WriteTo (XmlWriter w)
  63. {
  64. w.WriteRaw("&");
  65. w.WriteName(Name);
  66. w.WriteRaw(";");
  67. }
  68. }
  69. }