2015-10-14 95 views
0

我正在使用SelectNodes來讀取xml節點,但當我嘗試GetElementsByTagName時,我得到空值。SelectNodes返回null

XmlDocument xml = new XmlDocument(); 
xml.Load(DownloadFile); 
XmlNodeList xmlnode; 
xmlnode = xml.GetElementsByTagName("CruisePriceSummaryResponse"); 

for (int i = 0; i < xmlnode.Count; i++) 
{ 
    XmlNodeList rooms = xml .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 
    } 
} 

我想從BestFareFullFare每個孩子有兩個innerchilds BestFareFullFareand我需要閱讀每個TotalPrice閱讀TotalPrice

這是我的XML

<?xml version="1.0" encoding="utf-8"?> 
<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> 

幫助,將不勝感激。我不想使用linq,因爲這是一個使用VS2008的SSIS項目,它不支持linq。

在此先感謝

回答

0

您從不加載或讀取源XML。您的代碼

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

創建一個空的XML文檔,然後嘗試從空XML獲取元素。

你需要調用XmlDocument.LoadXmlDocument.LoadXML從文件或字符串讀取XML。

XmlDocument xml = new XmlDocument(); 
xml.Load("pathtosomefile.xml"); 
XmlNodeList xmlnode = xml.GetElementsByTagName("CruisePriceSummaryResponse"); 
+0

謝謝,我忘了在發佈的問題中添加這一行,我能夠看到xmlnode中的值,但是selectnodes是這裏重新調用null的問題。 P.S我已更新我的問題,並添加了缺少的xml.load行。 –