2011-05-18 67 views
1

我試圖使用ReplaceChild函數。代碼有效,並且不會拋出任何異常,但是當我將XML打印到屏幕上時,看起來好像該功能不起作用。原始節點是新的,但不是新的節點。c#中的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); 


    } 

感謝

+0

如果您可以發佈您正在解析的xml文件並指定您期望得到的輸出,那將會很有用。猜測'NextSibling'應該實現的鏈條是相當困難的... – 2011-05-18 08:10:26

回答

0

好了,發生了什麼事是當你做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()如果你已經有了一個參考。這是非常糟糕的做法,在較大的系統中可能會導致性能下降。