在 c# 中替换 XML
本文关键字:XML 替换 | 更新日期: 2023-09-27 17:57:01
我试图使用 ReplaceChild 函数。 代码有效,并且没有抛出任何异常,但是当我将XML打印到屏幕上时,似乎该函数不起作用。 原始节点是新节点,但不是新节点。
private void convertClubComp(XmlDocument doc)
{
XmlNode sessionNode = doc.SelectSingleNode("Session");
XmlNode clubsNode = doc.CreateNode(XmlNodeType.Element, "Clubs", "");
XmlNode playerNode = sessionNode.SelectSingleNode("Players").SelectSingleNode("Player");
XmlNode groupNode = sessionNode.SelectSingleNode("Players").SelectSingleNode("Player").SelectSingleNode("Groups");
Console.WriteLine(playerNode.Name);
clubsNode = doc.ImportNode(groupNode, true);
playerNode.ReplaceChild(clubsNode, sessionNode.SelectSingleNode("Players").SelectSingleNode("Player").SelectSingleNode("Groups"));
Console.WriteLine(clubsNode.FirstChild.FirstChild.Name);
Console.WriteLine("!"+playerNode.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.Name);
}
谢谢
好的,当你执行 ImportNode() 时,它会用另一个节点的克隆替换你对你创建的新节点的引用。我认为您正在寻找的是类似于以下内容的内容:
private void convertClubComp(XmlDocument doc)
{
XmlNode sessionNode = doc.SelectSingleNode("Session");
XmlNode playerNode = sessionNode.SelectSingleNode("Players").SelectSingleNode("Player");
XmlNode groupNode = playerNode.SelectSingleNode("Groups");
Console.WriteLine(playerNode.Name);
XmlNode clubsNode = doc.CreateElement("Clubs", "");
foreach (XmlNode child in groupNode.ChildNodes)
{
clubsNode.AppendChild(child.CloneNode(true));
}
foreach (XmlAttribute attribute in groupNode.Attributes)
{
clubsNode.Attributes.Append((attribute.Clone() as XmlAttribute));
}
playerNode.ReplaceChild(clubsNode, groupNode);
Console.WriteLine(clubsNode.FirstChild.FirstChild.Name);
Console.WriteLine("!" + playerNode.FirstChild.NextSibling.NextSibling.NextSibling.NextSibling.NextSibling.Name);
}
另外,如果您已经有引用,请不要使用 SelectSingleNode() 或 SelectNodes()。这确实是很糟糕的做法,在较大的系统中可能会扼杀您的表现。