Windows phone 7 HTML解析没有结果

Windows phone 7 HTML解析没有结果,windows-phone-7,linq-to-xml,html-parsing,html-agility-pack,Windows Phone 7,Linq To Xml,Html Parsing,Html Agility Pack,我试图解析这个HTML文档,以获取航班、时间、来源、日期和输出的内容 <div id="FlightInfo_FlightInfoUpdatePanel"> <table cellspacing="0" cellpadding="0"> <tbody> <tr class=""> <td class="airline"><img src="/images/airline logos/US.gif" title="

我试图解析这个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>

我在ScrollViewer或Listbox中都没有得到任何结果。我想知道我使用的linq解析对于我提供的HTML是否正确?

您试图将ScrollViewer的内容设置为
字符串[]
(数组)。因此,我要重复我自己的话,并说在你继续这项工作之前,你应该花一些时间来学习基础C#


您需要做的是使用
ListBox
而不是
ScrollViewer
,然后将
ListBox.ItemSource
设置为您的
节点
字符串数组。

您正在尝试将ScrollViewer的内容设置为
string[]
(数组)。因此,我要重复我自己的话,并说在你继续这项工作之前,你应该花一些时间来学习基础C#


您需要做的是使用
ListBox
而不是
ScrollViewer
,然后将
ListBox.ItemSource
设置为您的
节点
字符串数组。

您打算如何处理这一行

.Where(tr => tr.GetAttributeValue("td", "").Contains("class"))
GetAttributeValue(name,def)
在节点中查找键为
name
的属性,如果找到该属性,则返回该属性的值。否则,它将返回默认值
def

因此这里实际发生的是,
没有任何键为
td
的属性,因此它返回默认值(空字符串),其中不包含子字符串“class”,因此您的
节点被过滤掉

编辑: 这将返回一个数组,其中每个条目是包含每个td内容的8个字符串的数组:

var node = doc.DocumentNode.Descendants("div")
    .FirstOrDefault(x => x.Id == "FlightInfo_FlightInfoUpdatePanel")
    .Element("table")
    .Element("tbody")
    .Elements("tr")
    .Select(tr => tr.Elements("td").Select(td => td.InnerText).ToArray())
    .ToArray();
示例:

node[0][1] == "US5316"
node[0][3] == "Rarotonga"

你打算用这条线做什么

.Where(tr => tr.GetAttributeValue("td", "").Contains("class"))
GetAttributeValue(name,def)
在节点中查找键为
name
的属性,如果找到该属性,则返回该属性的值。否则,它将返回默认值
def

因此这里实际发生的是,
没有任何键为
td
的属性,因此它返回默认值(空字符串),其中不包含子字符串“class”,因此您的
节点被过滤掉

编辑: 这将返回一个数组,其中每个条目是包含每个td内容的8个字符串的数组:

var node = doc.DocumentNode.Descendants("div")
    .FirstOrDefault(x => x.Id == "FlightInfo_FlightInfoUpdatePanel")
    .Element("table")
    .Element("tbody")
    .Elements("tr")
    .Select(tr => tr.Elements("td").Select(td => td.InnerText).ToArray())
    .ToArray();
示例:

node[0][1] == "US5316"
node[0][3] == "Rarotonga"

我已经试过了,但还是没有结果。我意识到我可以对c#了解更多,但我当然有权问一个问题,而不必你一直告诉我我需要学习基础知识。请你理解,我只是在使用scrollviewer检查解析结果,然后再开始加载到listbox和绑定。数组在scrollviewer中的显示应该与在listbox中的显示相同,但是niether没有任何结果,因此问题就来了。如果您知道为什么
字符串[]
(数组)没有显示结果,请随意输入。我已经尝试过了,但仍然没有得到任何输出。我意识到我可以对c#了解更多,但我当然有权问一个问题,而不必你一直告诉我我需要学习基础知识。请你理解,我只是在使用scrollviewer检查解析结果,然后再开始加载到listbox和绑定。数组在scrollviewer中的显示应该与在listbox中的显示相同,但是niether没有任何结果,因此问题就来了。如果您知道
字符串[]
(数组)没有显示结果的原因,请随时输入。感谢您提供的一些建设性反馈。我对c#很陌生,每天都在学习。我以为我是从元素
获取所有属性
“class”
。你有没有可能给我一个代码示例,返回航班、航空公司、原产地等的值?当然,我在这里添加了一个示例。这就是你想做的吗?我想从这个`Rarotonga`中得到这个值“Rarotonga”,从
US5316
中得到US5316等等。。作为单个值或变量,然后可以输出到textbox或listbox。感谢您在这方面的帮助,您不知道我花了多少时间处理不同的变体。在这种情况下,为每个
创建一个数组可能会更好。每个条目都是一个包含属性值的8项数组。为了完成这一点,我再次编辑了答案。希望有帮助!再次感谢您在这方面的帮助,今晚我将试用此代码并让您知道。感谢您提供一些建设性的反馈。我对c#很陌生,每天都在学习。我以为我是从元素
获取所有属性
“class”
。你有没有可能给我一个代码示例,返回航班、航空公司、原产地等的值?当然,我在这里添加了一个示例。这就是你想做的吗?我想从这个`Rarotonga`中得到这个值“Rarotonga”,从
US5316
中得到US5316等等。。作为单个值或变量,然后可以输出到textbox或listbox。感谢您在这方面的帮助,您不知道我花了多少时间处理不同的变体。在这种情况下,为每个
创建一个数组可能会更好。每个条目都是一个包含属性值的8项数组。为了完成这一点,我再次编辑了答案。希望有帮助!再次感谢您在这方面的帮助,今晚我将尝试此代码并让您知道。