2011-09-02 66 views
1

我有下面的代碼來解析一個HTML頁面的一部分。如何輸出WP7的HTML敏捷包

我想知道的是如何將其輸出到列表框或文本框。

每當我嘗試,我得到未處理exceltion錯誤

私人無效PhoneApplicationPage_Loaded(對象發件人,RoutedEventArgs E) {

var doc = new HtmlDocument(); 
doc.LoadHtml("http://www.sourceURL.com"); 

var node = doc.DocumentNode.Descendants("div").FirstOrDefault(x => x.Id == "FlightInfo_FlightInfoUpdatePanel"); 

var value = node.InnerHtml; 
this.textBox1.Text = value; 

異常錯誤是:

System.NullReferenceException was unhandled 
Message: NullReferenceException 

堆棧跟蹤:

at Auckland_Airport.MainPage.PhoneApplicationPage_Loaded(Object sender, RoutedEventArgs e) 
    at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args) 
    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName) 

HTML佈局是

 <div id="FlightInfo_FlightInfoUpdatePanel"> 

     <table cellspacing="0" cellpadding="0"><tbody> 
      <tr class=""><td class="airline"><img src="/images/airline logos/US.gif" title="US AIRWAYS. " alt="US AIRWAYS. " /></td><td class="flight">US5316</td><td class="codeshare">NZ46</td><td class="origin">Rarotonga</td><td class="date">02 Sep</td><td class="time">10:30</td><td class="est">21:30</td><td class="status">CHECK IN CLOSING</td></tr><tr class="alt"><td class="airline"><img src="/images/airline logos/NZ.gif" title="AIR NEW ZEALAND LIMITED. " alt="AIR NEW ZEALAND LIMITED. " /></td><td class="flight">NZ6</td><td class="codeshare">&nbsp;</td><td class="origin">Los Angeles</td><td class="date">02 Sep</td><td class="time">19:15</td><td class="est">19:15</td><td class="status">DEPARTED</td></tr><tr class=""><td class="airline"><img src="/images/airline logos/AC.gif" title="Air Canada. " alt="Air Canada. " /></td><td class="flight">AC6093</td><td class="codeshare">NZ6</td><td class="origin">Los Angeles</td><td class="date">02 Sep</td><td class="time">19:15</td><td class="est">19:15</td><td class="status">DEPARTED</td></tr><tr class="alt"><td class="airline"><img src="/images/airline class="d 
    </div> 
</div> 

更清晰的HTML

<div id="FlightInfo_FlightInfoUpdatePanel"> 

    <table cellspacing="0" cellpadding="0"><tbody> 
    <tr class=""> 
    <td class="airline"><img src="/images/airline logos/NZ.gif" title="AIR NEW ZEALAND LIMITED. " alt="AIR NEW ZEALAND LIMITED. " /></td> 
    <td class="flight">NZ8</td> 
    <td class="codeshare">&nbsp;</td> 
    <td class="origin">San Francisco</td> 
    <td class="date">01 Sep</td> 
    <td class="time">17:15</td> 
    <td class="est">18:00</td> 
    <td class="status">DEPARTED</td> 
    </tr> 
    <tr class="alt"> 
    <td class="airline"><img src="/images/airline logos/AC.gif" title="Air Canada. " alt="Air Canada. " /></td> 
    <td class="flight">AC6103</td> 
    <td class="codeshare">NZ8</td> 
    <td class="origin">San Francisco</td> 
    <td class="date">01 Sep</td> 
    <td class="time">17:15</td> 
    <td class="est">18:00</td> 
+0

在你的標記中是否有一個帶'id =「DivName」'的div?無法從您發佈的代碼段中看到任何內容。 –

+0

@Darin對不起,剛編輯。我只是想開始簡單並顯示FlightInfo_FlightInfoUpdatePanel div中的所有html,然後我將解析單個td。我無法得到它輸出。 – Rhys

+0

什麼時候你會得到一個例外。也許你添加的堆棧跟蹤不完整。 –

回答

3

HtmlDocument.Load功能並不需要一個URI作爲參數,則應該收到一個結構化的HTML,你已經以某種方式從檢索服務器。

下面是使用WebClient類從服務器獲取HTML你的情況下,代碼:

 WebClient client = new WebClient(); 
     client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted); 

     client.DownloadStringAsync(new Uri(@"http://www.aucklandairport.co.nz/en/FlightInformation/DomesticArrivalsAndDepartures.aspx")); 

    } 

    void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     var html = e.Result; 

     var doc = new HtmlDocument(); 
      doc.LoadHtml(html); 

     var list = doc.DocumentNode.Descendants("div").ToList(); 

     var node = doc.DocumentNode.Descendants("div").FirstOrDefault(x => x.Id == "FlightInfo_FlightInfoUpdatePanel"); 

     var value = string.Empty; 

     if (node != null) 
      value = node.InnerHtml; 
    } 

在年底,value變量保存需要進一步解析內部HTML。

+0

這段代碼去哪裏?代替'var value = node.InnerHtml; this.textBox1.Text = value;' – Rhys

+0

正確。我已經更新了答案以顯示完整的代碼。 –

+0

謝謝你。我已經添加了代碼,但它在兩件事上有錯誤,一個Empty應該是大寫字母,另一個是var值聲明兩次 – Rhys