2015-10-14 3 views
0

Я использую SelectNodes для чтения узлов xml, но я получаю null при попытке GetElementsByTagName. Я получаю значения.SelectNodes return 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 
    } 
} 

Я хочу прочитать TotalPrice из BestFare и FullFare Каждый ребенок имеет два innerchilds BestFare и FullFareand мне нужно прочитать каждый 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, поскольку это проект SSIS с использованием VS2008, и он не поддерживает linq.

Заранее благодарен

ответ

0

Вы никогда не загружаете и не читаете исходный XML. Ваш код

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

создает пустой XML-документ, а затем пытается получить элементы из пустого xml.

Чтобы прочитать xml из файла или строки, вам необходимо позвонить XmlDocument.Load или XmlDocument.LoadXML.

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

Спасибо, что я забыл добавить эту строку в вопросительный вопрос, и я могу видеть значения в xmlnode, но selectnodes - проблема здесь, которая перенастраивает null. P.S я обновил свой вопрос и добавил отсутствующую строку xml.load. –