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