所以,我正在编写一个简单的函数来从 XML文档中删除 XML节点.据我所知,实现这一目标的最简单方法是: 获取将要删除的节点的引用(ChildNode) 使用ChildNode.ParentNode属性(ParentNode)获取对节点
>获取将要删除的节点的引用(ChildNode)
>使用ChildNode.ParentNode属性(ParentNode)获取对节点父级的引用
>调用ParentNode.RemoveChild(ChildNode)方法
现在,如果子节点是XmlElement,这可以很好用,但如果子节点是XML属性怎么办?根据X000Node.ParentNode的MSDN documentation,该属性将不返回任何内容,因为“[attributes]没有父项”.
属性肯定有“父母”,不是吗?必须将属性分配给XML元素,因此在我看来,XML元素将是属性的父元素.
有人可以澄清我的误解,或澄清为什么.NET Framework不会将属性视为拥有父母吗?
您可以使用XmlAttribute.OwnerElement
获取属性的所有者.
您的程序必须修改为以下内容:
>获取将要删除的节点的引用(ChildNode).
>如果节点的类型是XmlAttribute向下转换为该类型(AttributeNode)并使用AttributeNode.OwnerElement属性(ParentNode)获取对节点父节点的引用.如果没有,请转到第4步.
>调用ParentNode.Attributes.Remove(AttributeNode)方法.跳过剩下的步骤.
>使用ChildNode.ParentNode属性(ParentNode)获取对节点父节点的引用.
>调用ParentNode.RemoveChild(ChildNode)方法.
因此,基本上你必须给予属性特殊处理,反映它们实际上不是父子层次结构的一部分,而是 – 元素 – 是XML元素的一部分.