2010-10-06 48 views
0

我有一个节点,这个节点包含5个孩子节点。其中三个是RatePlan。我如何选择使用LINQ的RatePlan子节点?我如何选择特定的LINQ的孩子节点?

让我们澄清一些:

我的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

请用代码解释 – anishMarokey 2010-10-06 09:40:30

回答

7

你的问题还不是特别清楚,但是你威力只是想:

var ratePlans = node.Elements("RatePlan"); 

这是假设你使用LINQ to XML,而不是XmlNodeXmlDocument等,如果你是很实际上使用 “旧” DOM API,你可以使用:

var ratePlans = node.ChildNodes 
        .OfType<XmlElement>() 
        .Where(e => e.LocalName == "RatePlan"); 

...但我已经搬到LINQ到XML如果 您可以。它只是一个很多更好的XML API。

0

我想你的意思是:

var ratePlans = node.ChildNodes.OfType<RatePlan>();

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方法来获取单个计划的数组。

相关问题