C# 不能在 2 个 Xmlnodes 中添加相同的 XmlAttribute
Posted
技术标签:
【中文标题】C# 不能在 2 个 Xmlnodes 中添加相同的 XmlAttribute【英文标题】:C# cannot add the same XmlAttribute in 2 Xmlnodes 【发布时间】:2013-07-07 10:25:56 【问题描述】:我创建了 XmlAttribute,并将其添加到 XmlNode,一切正常。 当尝试将相同的 XmlAttribute 添加到另一个 XmlNode 时,它窃取我添加到的第一个 XmlNode 的属性。
我的场景是这样的: 父节点有能力,如果这个能力可用,那么我已经创建了一个新节点并将其设置为这个父节点的子节点。 父节点有 3 个(X-Y-Z)属性,如果父节点有能力,那么我创建子节点,并将这些属性也添加到它。 我的问题是当我这样做时:
fatherNode.Attributes.Append(attribute1);
属性被添加到集合中,但是当我之后这样做时:
childNode.Attributes.Append(attribute1);
它从fatherNode中删除了属性,现在它只在childNode中。
这是什么行为?有办法避免吗?
【问题讨论】:
【参考方案1】:试试这个:
fatherNode.Attributes.Append(attribute1);
childNode.Attributes.Append( (XmlAttribute)attribute1.Clone());
【讨论】:
变通方法有效,不知道为什么 XmlDocument 是这样设计的。 XmlAttribute 有属性 ParentNode,如果你将它附加到第二个节点,它的 parentNode 被设置为这个新节点并且失去了对旧节点的引用 是的,我看到了,但是我在我的父亲节点的 Attributes 集合中设置了对 XmlAttribute 的引用,那么这个引用是怎么改变的呢?我了解更改属性的 ParentNode,但是为什么还要更新父亲的属性,他们可以保留它。这样 parentNode 应该被称为 LatestParentNode :)以上是关于C# 不能在 2 个 Xmlnodes 中添加相同的 XmlAttribute的主要内容,如果未能解决你的问题,请参考以下文章