我正在处理一段较旧的代码,因此我没有选择使用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;