protected static void UpdateParent(XmlExpressionNode node, XmlExpressionNode parent)
 {
     if (ReferenceEquals(node.Parent, parent))
     {
         return;
     }
     node.Parent = parent;
 }
 public bool RemoveAttribute([NotNull] XmlExpressionNode node)
 {
     Should.NotBeNull(node, "node");
     if (_attributes.Remove(node))
     {
         UpdateParent(node, null);
         return(true);
     }
     return(false);
 }
 public void AddAttribute([NotNull] XmlExpressionNode node)
 {
     Should.NotBeNull(node, "node");
     if (_attributes.Contains(node))
     {
         return;
     }
     _attributes.Add(node);
     UpdateParent(node, this);
 }
 public void AddElement([NotNull] XmlExpressionNode node)
 {
     Should.NotBeNull(node, "node");
     if (_elements.Contains(node))
     {
         return;
     }
     _elements.Add(node);
     UpdateParent(node, this);
 }
        protected override void AcceptInternal(IExpressionVisitor visitor)
        {
            StartTag = AcceptWithCheck(visitor, StartTag, true);
            if (StartTagEnd != null)
            {
                StartTagEnd = AcceptWithCheck(visitor, StartTagEnd, true);
            }
            if (EndTag != null)
            {
                EndTag = AcceptWithCheck(visitor, EndTag, true);
            }
            for (int i = 0; i < _elements.Count; i++)
            {
                XmlExpressionNode node = AcceptWithCheck(visitor, _elements[i], false);
                if (node == null)
                {
                    _elements.RemoveAt(i);
                    i--;
                }
                else
                {
                    _elements[i] = node;
                }
            }

            for (int i = 0; i < _attributes.Count; i++)
            {
                XmlExpressionNode node = AcceptWithCheck(visitor, _attributes[i], false);
                if (node == null)
                {
                    _attributes.RemoveAt(i);
                    i--;
                }
                else
                {
                    _attributes[i] = node;
                }
            }
        }
 public XmlValueExpressionNode(XmlExpressionNode parent, XmlValueExpressionType type, int start, int end)
     : this(type, start, end)
 {
     UpdateParent(this, parent);
 }