2

我正在使用一段较旧的代码,所以我没有使用 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;
4

0 回答 0