2012-03-12 53 views
0

屬性如果我有一個簡單的XML文檔,如的LINQ的Xml - 查找值

<case id="37d3c93c-3201-4002-b24f-08e1221c3cb7"> 
    <party id="26dad8c5-9487-48f2-8911-1d78c00095b2">...</party> 
    <illustration CaseId="37d3c93c-3201-4002-b24f-08e1221c3cb7">....</illustration> 
    <illustration CaseId="37d3c93c-3201-4002-b24f-08e1221c3cb7">....</illustration> 
    <item relatedCaseId="37d3c93c-3201-4002-b24f-08e1221c3cb7">...</illustration> 
</case> 

我有一些代碼變化的情況下元素的id屬性。我現在正在尋找一些LINQ代碼,它可以幫助我搜索所有具有與舊值相匹配的屬性值的元素,以便我可以用新值替換它。我沒有屬性名稱列表,需要搜索整個文檔。

任何提示/想法? 謝謝!

回答

2

事情是這樣的:

var matches = doc.Descendants() 
       .Where(x => x.Attributes() 
           .Any(attr => attr.Value == oldValue)); 

或者,如果你只是想更換值,你只需要在屬性本身:

var attributes = doc.Descendants() 
        .Attributes() 
        .Where(attr => attr.Value == oldValue) 
        .ToList(); 
foreach (var attribute in attributes) 
{ 
    attribute.Value = newValue; 
} 

這是完全有可能複製到列表在這種情況下並不是必需的,但我通常更喜歡在變異XDocument時進行復制以避免混淆。 (當你刪除一個元素或類似的東西時,這當然是必要的 - 只需設置一個屬性的值可能不會影響事情。)