2013-07-16 36 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