如何使用LINQ选择特定的子节点?

Erk*_*BAN 2 linq xmlnode

我有一个节点,这个节点包含5个子节点.其中三个是RatePlan.如何使用LINQ选择那些RatePlan子节点?

让我们澄清一下:

我的xml是这样的:

<hotels>
<hotel id="1" name="hotel 1">
    <telephone>123456789</telephone>
    <fax>123</fax>
    <address>hotels address</address>
    <hotelRatePlan>10</hotelRatePlan>
    <hotelRatePlan>11</hotelRatePlan>
    <hotelRatePlan>12</hotelRatePlan>
  </hotel>
  <hotel id="2" name="hotel 2">
    <telephone>123456789</telephone>
    <fax>123</fax>
    <address>hotels address</address>
    <hotelRatePlan>100</hotelRatePlan>
    <hotelRatePlan>110</hotelRatePlan>
    <hotelRatePlan>120</hotelRatePlan>
  </hotel>
  <hotel id="3" name="hotel 3">
    <telephone>123456789</telephone>
    <fax>123</fax>
    <address>hotels address</address>
    <hotelRatePlan>10</hotelRatePlan>
    <hotelRatePlan>11</hotelRatePlan>
    <hotelRatePlan>12</hotelRatePlan>
  </hotel>
</hotels>
Run Code Online (Sandbox Code Playgroud)

我正在使用XMLDocument来读取XML文件.在我阅读之后,我使用SelectNodes进行选择.当我得到第一个酒店信息时,我想选择特定的儿童节点(hotelRatePlan).我怎样才能做到这一点?

Jon*_*eet 9

你的问题不是特别清楚,但你可能只想:

var ratePlans = node.Elements("RatePlan");
Run Code Online (Sandbox Code Playgroud)

这就是你假设实际使用LINQ to XML,而不是XmlNode,XmlDocument等等.如果你正在使用"旧" DOM API,你可以使用:

var ratePlans = node.ChildNodes
                    .OfType<XmlElement>()
                    .Where(e => e.LocalName == "RatePlan");
Run Code Online (Sandbox Code Playgroud)

...但是如果可以的话,我会转向LINQ to XML.它只是一个更好的XML API.