2012-03-09 62 views
0

刪除的XDocument節點希望這將是一個容易的人來解決。通過ID

我使用下面的代碼刪除XML節點。

XDocument XD = XDocument.Parse(content); 
    XD.Root.Descendants("{http://www.w3.org/2000/svg}rect").Remove(); 

這工作得很好,但我現在想要做一個地方的RECT子句以「BPR」的ID只刪除節點。我見過幾個例子,其中包括。但是,這似乎並不想用我的代碼。

任何人都可以幫忙嗎?

感謝

+2

「這似乎並不想與之合作我的代碼「 - 這不是對錯誤發生的非常準確的描述。請提供一個簡短但完整的示例,其中包含示例輸入XML文件和預期輸出以及代碼。 – 2012-03-09 12:48:59

+0

嗨喬恩,對不起,我應該說。它正在標記。在VS2010中,因爲我沒有包含使用System.Linq的引用;但是現在我在使用Foo42的例子時遇到了一個錯誤。內。載的代碼標記了錯誤信息 - 「不能轉換lambda表達式類型System.Xml.Linq.XAttribute,因爲它不是一個委託類型」 – tmutton 2012-03-09 14:39:34

+0

人士建議更改Foo42的回答,以及提供我自己的更簡單(IMO)一個。 – 2012-03-09 14:46:16

回答

2

一個簡單的替代方法(IMO)於Foo42的回答是:

XDocument XD = XDocument.Parse(content); 
XD.Root.Descendants("{http://www.w3.org/2000/svg}rect") 
     .Where(el => (string) el.Attribute("id") == "bpr") 
     .Remove(); 
+0

那偉大的工作。謝謝! – tmutton 2012-03-09 14:55:26

1
XDocument XD = XDocument.Parse(content); 
    XD.Root.Descendants("{http://www.w3.org/2000/svg}rect").Where(el => el.Attributes().Contains(at => at.Name == "id" && at.Value == "bpr")).Remove(); 

我覺得這樣的事情應該工作

+0

謝謝你的幫助。我試圖測試它,但在VS2010中出現錯誤。它強調「在=> at.Name ==‘ID’&& at.Value ==‘BPR’」與錯誤消息 - 「不能轉換lambda表達式鍵入System.Xml.Linq.XAttribute,因爲它不是委託鍵入」 – tmutton 2012-03-09 14:37:32

+0

我想你想'Any',而不是'Contains' – 2012-03-09 14:44:57