2015-10-14 56 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