2015-10-14 49 views
0

我想在c#中讀取xml。我能夠讀取節點'ArrayOfCruisePriceSummaryResponse',但我如何讀取內部節點。使用c讀取XML內部子節點#

XmlNodeList xmlnode; 
xmlnode = xml.GetElementsByTagName("CruisePriceSummaryResponse"); 

for (int i = 0; i <= xmlnode.Count - 1; i++) 
{ 

} 

使用GetElementsByTagName我能夠達到那個節點,但我怎麼能讀童心。我想從BestFareFullFare讀取TotalPriceFullFare每個孩子有兩個小孩BestFareFullFare,我需要閱讀每個TotalPrice

<ArrayOfCruisePriceSummaryResponse 
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://schemas.datacontract.org/2004/07/OpenseasAPI.ServiceModel"> 
    <CruisePriceSummaryResponse> 
     <AvailablePromos 
      xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
      <d3p1:string>FLA</d3p1:string> 
      <d3p1:string>FLB</d3p1:string> 
     </AvailablePromos> 
     <Brand>PA</Brand> 
     <CruiseCategory i:nil="true"/> 
     <RoomSize> 
      <CruisePriceSummaryRoomSize> 
       <BestFare> 
        <TotalPrice>2798.0000000</TotalPrice> 
       </BestFare> 
       <FullFare> 
        <TotalPrice>3198.000000</TotalPrice> 
       </FullFare> 
       <PaxCount>2</PaxCount> 
      </CruisePriceSummaryRoomSize> 
      <CruisePriceSummaryRoomSize> 
       <BestFare> 
        <TotalPrice>2796.000000</TotalPrice> 
       </BestFare> 
       <FullFare> 
        <TotalPrice>4196.000000</TotalPrice> 
       </FullFare> 
       <PaxCount>4</PaxCount> 
      </CruisePriceSummaryRoomSize> 
     </RoomSize> 
     <ShipCode>PD</ShipCode> 
    </CruisePriceSummaryResponse> 
    <CruisePriceSummaryResponse> 
     <AvailablePromos 
      xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
      <d3p1:string>FLA</d3p1:string> 
      <d3p1:string>LF1</d3p1:string> 
     </AvailablePromos> 
     <Brand>PA</Brand> 
     <RoomSize> 
      <CruisePriceSummaryRoomSize> 
       <BestFare> 
        <TotalPrice>1298.000000</TotalPrice> 
       </BestFare> 
       <FullFare> 
        <TotalPrice>3498.000000</TotalPrice> 
       </FullFare> 
       <PaxCount>2</PaxCount> 
      </CruisePriceSummaryRoomSize> 
      <CruisePriceSummaryRoomSize> 
       <BestFare> 
        <TotalPrice>1796.000000</TotalPrice> 
       </BestFare> 
       <FullFare> 
        <TotalPrice>5396.000000</TotalPrice> 
       </FullFare> 
       <PaxCount>4</PaxCount> 
      </CruisePriceSummaryRoomSize> 
     </RoomSize> 
     <ShipCode>PJ</ShipCode> 
    </CruisePriceSummaryResponse> 
</ArrayOfCruisePriceSummaryResponse> 

P.S我不不想使用LINQ,因爲我在SSIS項目中使用VS2008工作,它不支持LINQ。

+0

你介意使用'XmlSerializer'嗎? – Icepickle

回答

4

您可以使用各種SelectNode變體遍歷文檔並提取數據。

試試這個:

XmlNodeList xmlnodes; 
xmlnodes = xml.GetElementsByTagName("CruisePriceSummaryResponse"); 

for (int i = 0; i < xmlnodes.Count; i++) 
{ 
    XmlNodeList rooms = xmlnodes[i].SelectNodes("RoomSize/CruisePriceSummaryRoomSize"); 
    for(int j = 0; j < rooms.Count; j++) 
    { 
     string bestFare = rooms[j].SelectSingleNode("BestFare/TotalPrice").InnerText; 
     string fullFare = rooms[j].SelectSingleNode("FullFare/TotalPrice").InnerText; 

     // do whatever you need 
    } 
} 

你可能想看看here有關的XPath位置的信息。

+0

謝謝@Amit。我得到錯誤'System.Xml.XmlNodeList'不包含'SelectNodes'的定義我聲明XmlDocument xml = new XmlDocument();然後XmlNodeList rooms = xml.SelectNodes(「RoomSize/CruisePriceSummaryRoomSize」);.但這是返回0值 –

+0

@OwaisAhmed - 你是對的,我忘了訪問者('[我]')。你的命名方案使我困惑,所以我重命名了變量並添加了缺失部分。 – Amit