此问题是我在此发布的有关解析HTML Read HTML on Windows Phone 8
的早期问题的后续问题我正在解析一个包含大量tr标签的HTML页面:
<tr>
<td class="first">
</td>
<td >
Origin
</td>
<td>
Airline
</td>
<td>
Flight Number
</td>
<td>
22 Feb 11:50
</td>
<td class="last">
Arrived 12:35
</td>
</tr>
这是我用来阅读页面的代码,它运行正常:
foreach (HtmlNode node in htmlDocument.DocumentNode.SelectNodes("//td"))
{
string item = node.ChildNodes[0].InnerHtml.Trim();
lstResults.Items.Add(item)
}
问题是,我想将每组5个TD值连接成一个字符串。目前,代码将每个项目分别添加到lisbox中,因此我基本上每个航班有5个条目,如下所示:
FlightNumber
DueTime
arrival time
Origin
Airline
但我只是想为每个航班添加一个条目,如下所示:
原产地 - 航空公司 - 航班号 - 到期 - 到达
每个航班都有tr标签,每个tr标签内部都有上面显示的信息。我不确定当我到达特定航班的标签末尾时如何检测,因此我可以将信息分组为一个字符串,而不是单独添加每个td标签。每个tr标记的开头或结尾都有一个空白字符串,但我再次无法弄清楚如何将每个td标记的值连接成一个字符串,而不是在单独的行上添加每个值。
有什么想法吗?
答案 0 :(得分:1)
我实际上使用了下面的实现。
HtmlNodeCollection table = htmlDocument.DocumentNode.SelectNodes("//tr");
HtmlNodeCollection rows = table[0].SelectNodes("//td");
for (int i = 0; i < rows.Count; ++i)
{
string flight = rows[i].InnerHtml.Trim();
if (!flight.Contains(".jpg"))
{
item += flight + " - ";
}
else
{
lstFlights.Items.Add(item);
item = "";
}
}
答案 1 :(得分:0)
您应该尝试添加一个最多为5的int。然后从循环1-5中添加结果到字符串或var。然后只在第5个循环中将该变量转储到列表中作为单个项目。然后,您想将计数器重置为0并重新开始。
Int i =1;
String item = String.Empty;
foreach (HtmlNode node in htmlDocument.DocumentNode.SelectNodes("//td"))
{
if(i =<5)
{
item += node.ChildNodes[0].InnerHtml.Trim();
i++;
}
if (i == 5)
{
lstResults.Items.Add(item);
i = 0;
}
}