LINQ to XML根据子节点和属性选择节点

时间:2013-07-16 13:39:05

标签: xml linq linq-to-xml

我刚刚转到LINQ,所以仍然遇到某些情况。

在以下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>

1 个答案:

答案 0 :(得分: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));

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

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