XmlLinkedNode.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // System.Xml.XmlLinkedNode
  3. //
  4. // Authors:
  5. // Jason Diamond <[email protected]>
  6. // Kral Ferch <[email protected]>
  7. //
  8. // (C) 2002 Jason Diamond, Kral Ferch
  9. //
  10. using System;
  11. namespace System.Xml
  12. {
  13. public abstract class XmlLinkedNode : XmlNode
  14. {
  15. #region Fields
  16. XmlLinkedNode nextSibling;
  17. XmlLinkedNode lastLinkedChild;
  18. #endregion
  19. #region Constructors
  20. internal XmlLinkedNode(XmlDocument doc) : base(doc) { }
  21. #endregion
  22. #region Properties
  23. internal bool IsRooted {
  24. get {
  25. for (XmlNode n = ParentNode; n != null; n = n.ParentNode)
  26. if (n.NodeType == XmlNodeType.Document)
  27. return true;
  28. return false;
  29. }
  30. }
  31. public override XmlNode NextSibling
  32. {
  33. get {
  34. if(ParentNode == null) {
  35. return null;
  36. }
  37. else if (Object.ReferenceEquals(nextSibling, ParentNode.LastLinkedChild.NextLinkedSibling) == false) {
  38. return nextSibling;
  39. }
  40. else {
  41. return null;
  42. }
  43. }
  44. }
  45. internal XmlLinkedNode NextLinkedSibling
  46. {
  47. get { return nextSibling; }
  48. set { nextSibling = value; }
  49. }
  50. public override XmlNode PreviousSibling
  51. {
  52. get {
  53. if (ParentNode != null) {
  54. XmlNode node = ParentNode.FirstChild;
  55. if (node != this) {
  56. do {
  57. if (node.NextSibling == this)
  58. return node;
  59. } while ((node = node.NextSibling) != null);
  60. }
  61. }
  62. return null;
  63. }
  64. }
  65. // copied this way from XmlElement
  66. internal override XmlLinkedNode LastLinkedChild
  67. {
  68. get { return lastLinkedChild; }
  69. set { lastLinkedChild = value; }
  70. }
  71. #endregion
  72. }
  73. }