2011-09-16 125 views
1

我正在使用以下代碼將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]; 
    } 

任何幫助將apprecaited任何節點的未處理的異常。如果您需要澄清此問題,請告訴我。

+0

你不能只檢查node.length是否大於0? – Egor

+0

@Egor我試過了,但它不起作用。我猜是因爲在某些情況下節點[2],節點[3etc ...元素不存在。它是一個奇怪的。我也認爲節點長度條件會起作用。 – Rhys

+1

一個核心問題似乎是文本框不是可變的,但是是固定的(box1,box2等)。考慮使用不同的控件,也許是一個列表控件的種類。然後'n'項可以統一添加(並且只使用循環結構)。文本框也可以動態創建,但這不會是我的第一選擇。 – 2011-09-16 00:24:38

回答

1

爲避免無效索引,全部必須確保尺寸,例如,

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項目可以統一添加(並且只需使用循環構造而不需要第一次索引檢查)。文本框也可以動態創建,但這不會是我的第一選擇。

快樂編碼。