【问题标题】:C# cannot add the same XmlAttribute in 2 XmlnodesC# 不能在 2 个 Xmlnodes 中添加相同的 XmlAttribute
【发布时间】: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中。

这是什么行为?有办法避免吗?

【问题讨论】:

    标签: c# xml xmlnode


    【解决方案1】:

    试试这个:

    fatherNode.Attributes.Append(attribute1);
    childNode.Attributes.Append( (XmlAttribute)attribute1.Clone());
    

    【讨论】:

    • 变通方法有效,不知道为什么 XmlDocument 是这样设计的。
    • XmlAttribute 有属性 ParentNode,如果你将它附加到第二个节点,它的 parentNode 被设置为这个新节点并且失去了对旧节点的引用
    • 是的,我看到了,但是我在我的父亲节点的 Attributes 集合中设置了对 XmlAttribute 的引用,那么这个引用是怎么改变的呢?我了解更改属性的 ParentNode,但是为什么还要更新父亲的属性,他们可以保留它。这样 parentNode 应该被称为 LatestParentNode :)
    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多