将XmlNode替换为另一个XmlNode

时间:2013-04-02 22:55:04

标签: c# xml xmldocument

我正在处理一段较旧的代码,因此我没有选择使用XDocument。

我正在尝试将一个XmlNode替换为另一个,但是由于某种原因,XmlDocument.ReplaceChild()会抱怨:要删除的节点不是此节点的子节点。

我不明白为什么我收到此错误,因为我从要替换的元素中引用了XmlDocument。

private XmlNode ReplaceWithSpan(XmlNode node)
{
    if (XmlNodeType.Element == node.NodeType)
    {
        XmlDocument ownerDocument = node.OwnerDocument;
        XmlNode spanNode = ownerDocument.CreateElement("span");

        for (int i = 0; i < node.Attributes.Count; i++)
        {
            XmlAttribute attribute = node.Attributes[i];
            AddAttribute(spanNode, attribute.Name, attribute.Value);
        }
        ownerDocument.ReplaceChild(spanNode, node); //this doesn't work
        return spanNode;
    }
    throw new InvalidCastException(string.Format("Could not replace custom edit node of type {0}.", node.NodeType.ToString()));
}

某人我错了吗?

更新

弄清楚了。问题是旧节点不是所有者文档的直接子节点。以下更改有效:

  node.ParentNode.ReplaceChild(spanNode, node);
  return spanNode;

0 个答案:

没有答案