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的主要内容,如果未能解决你的问题,请参考以下文章

附加到 XMLNode 的 XMLNodes 是“未定义的”? Actionscript 2.0 不友善

我不能在列中添加具有 2 个相同值的行

如何在文本框中显示 xmlnodes

XmlNodes 剥离 HTML

C#在字符串中添加一个字符

C#列表添加有效但不能追加? [复制]