我正在使用以下代码将HTML解析为数组。
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("table")
.FirstOrDefault(x => x.Id == "departures")
.Element("tbody") .Elements("tr")
.Select(tr => tr.Elements("td")
.Select(td => td.InnerText).ToArray()).ToArray();
然后我使用以下代码输出到Texblock。
//first line
textBlock1.Text = node[0][0];
textBlock2.Text = node[0][1];
textBlock3.Text = node[0][2];
//Second line
textBlock4.Text = node[1][0];
textBlock5.Text = node[1][1];
textBlock6.Text = node[1][2];
//Third line
textBlock7.Text = node[2][0];
textBlock8.Text = node[2][1];
textBlock9.Text = node[2][2];
我的问题是:HTMl在一天中发生了变化,因此有时候没有和[2],有时会有[12]。
我想知道的是我如何通过条件语句检查数组是否存在,只有输出值才会输出。
我尝试过如下所示的条件语句,但是当没有任何节点[2]或节点[1]结果时,它仍会显示未处理的异常
if (node[2][0].length > 0)
{
textBlock1.Text = node[2][0];
}
任何帮助都会得到帮助。如果您需要澄清,请告诉我。
答案 0 :(得分:1)
要避免无效索引,必须确保 all 维度,例如
if (node.length > 2 && node[2].length > 0) {
// Okay to use node[2][0]
// Since && is short-circuiting it will never make second
// check if first fails.
}
对我来说,一个更基本的问题似乎是文本框不是可变的但是是固定的(box1,box2等)。考虑使用不同的控件,可能是各种列表控件。然后可以统一添加n
项(并且只需使用循环结构而无需第一次索引检查)。文本框也可以动态创建,但这不是我的首选。
快乐的编码。