我有一个节点,此节点包含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>
我正在使用XMLDocument来读取XML文件。在我阅读之后,我使用SelectNodes进行选择。当我得到第一个酒店信息时,我想选择特定的儿童节点(hotelRatePlan)。我怎么能这样做?
答案 0 :(得分:9)
您的问题不是特别清楚,但可能只是想要:
var ratePlans = node.Elements("RatePlan");
假设你实际使用LINQ to XML而不是XmlNode
,XmlDocument
等。如果 使用“old” DOM API,您可以使用:
var ratePlans = node.ChildNodes
.OfType<XmlElement>()
.Where(e => e.LocalName == "RatePlan");
...但是如果可以的话,我会转向LINQ to XML。它只是一个很多更好的XML API。
答案 1 :(得分:0)
我认为你的意思是:
var ratePlans = node.ChildNodes.OfType<RatePlan>()
;
答案 2 :(得分:0)
如果您确定每家酒店只有三个房价计划,那么您可以将酒店加载到酒店类型的对象中,如下所示:
XDocument data = XDocument.Load(yourXMLFileNameHere);
//if you have a namespace defined:
XNamespace ns = data.Root.Name.Namespace;
List<Hotels> hotels = (from item in data.Descendants(ns + "hotel")
select new Hotel
{
Id=Convert.ToInt32(item.Attribute("id").Value),
Name=item.Attribute("name").Value,
Telephone=item.Element(ns+"telephone").Value,
Fax=item.Element(ns+"fax").Value,
Address=item.Element(ns+"address").Value,
RatePlan1=item.Element(ns+"hotelRatePlan1").Value,
RatePlan2=item.Element(ns+"hotelRatePlan2").Value,
RatePlan3=item.Element(ns+"hotelRatePlan3").Value
}).ToList<Hotels>();
然后您按以下方式参考您的第一个费率计划:
string ratePlan1 = hotels [0] .RatePlan1;
如果您的费率计划的数量会有所不同,您可以将它们合并为一个字符串,如下所示:
<hotelRatePlans>10 20 30</hotelRatePlans>
然后,您更改提取费率计划的方式,当您需要实际计划时,使用String.Split方法获取各个计划的数组。