XmlLinkedNode.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #endregion
  18. #region Constructors
  19. internal XmlLinkedNode(XmlDocument doc) : base(doc) { }
  20. #endregion
  21. #region Properties
  22. internal bool IsRooted {
  23. get {
  24. for (XmlNode n = ParentNode; n != null; n = n.ParentNode)
  25. if (n.NodeType == XmlNodeType.Document)
  26. return true;
  27. return false;
  28. }
  29. }
  30. public override XmlNode NextSibling
  31. {
  32. get {
  33. if(ParentNode == null) {
  34. return null;
  35. }
  36. else if (Object.ReferenceEquals(nextSibling, ParentNode.LastLinkedChild.NextLinkedSibling) == false) {
  37. return nextSibling;
  38. }
  39. else {
  40. return null;
  41. }
  42. }
  43. }
  44. internal XmlLinkedNode NextLinkedSibling
  45. {
  46. get { return nextSibling; }
  47. set { nextSibling = value; }
  48. }
  49. public override XmlNode PreviousSibling
  50. {
  51. get {
  52. if (ParentNode != null) {
  53. XmlNode node = ParentNode.FirstChild;
  54. if (node != this) {
  55. do {
  56. if (node.NextSibling == this)
  57. return node;
  58. } while ((node = node.NextSibling) != null);
  59. }
  60. }
  61. return null;
  62. }
  63. }
  64. #endregion
  65. }
  66. }