Как вывести HTML Agility Pack для WP7 - PullRequest
       26

Как вывести HTML Agility Pack для WP7

1 голос
/ 02 сентября 2011

У меня есть следующий код для разбора части html-страницы.

Я хотел бы знать, как вывести его в список или текстовое поле.

Всякий раз, когда япопробуйте получить необработанную ошибку ExcelE

private void 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>

1 Ответ

3 голосов
/ 02 сентября 2011

Функция 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-код, необходимый для дальнейшего анализа.

...