2010-10-06 51 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方法來獲取單個計劃的數組。

相關問題