2013-12-14 69 views
0

我有一個XML文件牛逼帽子1個多節點中刪除一個子節點我會刪除... 1個節點,這裏是:從parrent節點具有相同的名稱

<games> 
    <game> 
    <gameName>Test6</gameName> 
    <exePath>E:\LeagueOfLegends\League of Legends\lol.launcher.exe</exePath> 
    <Files> 
     <file>C:\Users\Stian\Desktop\toComp\334.jpg</file> 
     <file>C:\Users\Stian\Desktop\toComp\341.jpg</file> 
     <file>C:\Users\Stian\Desktop\toComp\compressed\334.jpg</file> 
     <file>C:\Users\Stian\Desktop\toComp\compressed\341.jpg</file> 
     <file>C:\Users\Stian\Desktop\toComp\compressed\Test1\334.jpg</file> 
     <file>C:\Users\Stian\Desktop\toComp\compressed\Test1\341.jpg</file> 
    </Files> 
</game> 
</games> 

我的問題是...我想刪除其中一個文件節點...包含「C:\ Users \ Stian \ Desktop \ toComp \ 334.jpg」作爲內部文本...

而我的代碼爲目前(並且它不工作):

private void removeFile_Click(object sender, EventArgs e) 
{ 
     String appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString(); 
     String gpsPath = appDataFolder + "/GameProfileSaver"; 
     String gName = comboBox1.SelectedItem.ToString(); 

     XmlDocument doc = new XmlDocument(); 
     doc.Load(gpsPath + "/games.xml"); 

     foreach (string li in listBox1.SelectedItems) 
     { 
      string liS = li.Replace(@"\\", @"\"); 
      XmlNode file = doc.SelectSingleNode("games/game[gameName='" + gName + "']/Files[@file='" + liS + "']"); 
      file.ParentNode.RemoveChild(file);    
     } 
     doc.Save(gpsPath + "/games.xml"); 
} 

而我剛剛得到一個NullReferenceException ....並且當我嘗試其他的東西..我現在沒有代碼..是它刪除了整個節點...

+0

沒有做過的XPath的年齡,但我敢肯定'@'用於屬性('@文件=')。在任何情況下,'file.ParentNode.RemoveChild(file)'看起來都不正確 - 就像你告訴它刪除它自己一樣。 – Tim

回答

1

如何使用Linq2Xml?

string nodeToDelete = @"C:\Users\Stian\Desktop\toComp\334.jpg"; 
var xDoc = XDocument.Load(fname); 

xDoc.Descendants() 
    .First(n => (string)n == nodeToDelete) 
    .Remove(); 

string newXml = xDoc.ToString(); 
+1

比你!這工作很好:) –

0
XmlNode file = doc.SelectSingleNode("games/game[gameName='" + gName + "']/Files/file['" + liS + "']"); 

作品對我來說

相關問題