2012-03-12 61 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时进行复制以避免混淆。 (当你删除一个元素或类似的东西时,这当然是必要的 - 只需设置一个属性的值可能不会影响事情。)