2013-07-16 266 views
1

我只是轉向LINQ,所以仍然陷於某些場景。LINQ to XML選擇基於子節點和屬性的節點

在以下XML中,我需要根據RoomCodes屬性值選擇正確的Persist節點,並根據我們所選內容抓取Item/@屬性中的其他值。因此,如果我需要第二個,我將通過@RoomCodes =「257 | 1」進行選擇,並且還需要來自該Persist節點的貨幣等。

感謝所有

哈根達斯

<Root> 
    <Persist> 
     <Item SequenceNum="Wy4FDfktUFj"/> 
     <Item RatePlanCode="Qgcu8UofK+ARXUwDD6NGf"/> 
     <Item RoomCodes="232|4"/> 
     <Item AmountAfterTax="1442.00"/> 
     <Item CurrencyCode="USD"/> 
    </Persist> 
    <Persist> 
     <Item SequenceNum="Wy4FDfktUFj"/> 
     <Item RatePlanCode="Unk28iUoIjundujak+9094j3"/> 
     <Item RoomCodes="257|1"/> 
     <Item AmountAfterTax="552.00"/> 
     <Item CurrencyCode="USD"/> 
    </Persist> 
</Root> 

回答

2
string value = "232|4"; 
var xdoc = XDocument.Load(path_to_xml); 
var persist = 
    xdoc.Root.Elements("Persist") 
     .FirstOrDefault(p => 
      p.Elements().Any(i => (string)i.Attribute("RoomCodes") == value)); 

或者使用XPath擴展的LINQ to XML:

var persist = xdoc.XPathSelectElement("//Persist[Item/@RoomCodes='257|1']"); 
+1

謝謝,工作就像一個魅力。 – DazzlaJ