2014-01-14 94 views
0

元素我的XElement = XDOC無法刪除XML

<div id="item123"> 
    <div id="item456"> 
     <h3 id="1483538342"> 
      <span>Dessuten møtte</span> 
     </h3> 
     <p>Test!</p> 
    </div> 
</div> 

當我嘗試刪除恩與ID項= 「item456」 我得到一個錯誤

System.NullReferenceException: Object reference not set to an instance of an object. 

var item = "456"; 
xDoc.Descendants("div").Where(s => s.Attribute("id").Value == "item" + item).Remove(); 

我可以」不明白這裏有什麼問題。

+2

'「item」+ item'將搜索屬性值'「itemitem456」'。 –

+0

您的xml看起來像html ... –

+0

Adriano,它輸入錯誤。現在它是固定的。謝謝:) – podeig

回答

2

您需要檢查當前元素(在where迭代中)是否具有id屬性,否則您將訪問空對象並獲取異常。

var item = "456"; 
xDoc.Descendants("div").Where(s => s.Attribute("id") != null && s.Attribute("id").Value == "item" + item).Remove(); 
+0

看起來你是對的。我再也沒有例外。但是這個元素在那裏。它不會被刪除。 – podeig

+0

該元素是否仍在'xdoc'對象中,或者您在討論持久保存的文件?你可以通過使用'var elem = xDoc.Descendants(「div」)來檢查'Where'是否找到了你的目標元素。Where(s => s.Attribute(「id」)!= null && s.Attribute(「id」 ).Value ==「item」+ item).FirstOrDefault();'。如果'elem'爲'null',則您的參數(「item456」)可能無效。 –

+0

一切都很好。加工!!!我在wronf的地方檢查了結果。感謝您的幫助,安德烈! :) – podeig

1

你的錯誤意味着一些div元素沒有id屬性。因此s.Attribute("id")返回null。試圖讓它的值引發異常。如果你會投屬性string,而不是試圖訪問它的Value,你不會得到錯誤(如果未找到屬性null將返回):

xDoc.Descendants("div") 
    .Where(d => (string)d.Attribute("id") == "item" + item) 
    .Remove(); 

而且這樣你正在處理的HTML我建議你使用適當的工具 - HtmlAgilityPack。刪除你的div節點將如下所示:

HtmlDocument doc = new HtmlDocument(); 
doc.Load(path_to_file); 
foreach (var div in doc.DocumentNode.SelectNodes("//div[@id='item456']")) 
    div.Remove();