2014-02-24 53 views
1

我工作的Windows Phone 8設備上,並嘗試從http://www.livescience.com/41480-3d-printed-kidneys-take-small-steps.html與HTML敏捷包解析HTML文檔,我可以輕鬆地獲得<title>標籤,但現在我想從該文件全<p>標籤。我試過這兩個解決方案onetwo,但它不起作用。這是我的實際代碼基於這些解決方案的Html敏捷包的selectNodes返回null

private void loadDoc() 
    { 
     try 
     { 
      HtmlWeb.LoadAsync("http://www.livescience.com/41480-3d-printed-kidneys-take-small-steps.html", Html_Completed); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 

    private void Html_Completed(object sender, HtmlDocumentLoadCompleted e) 
    { 
     doc = e.Document; 
     title = doc.DocumentNode.SelectSingleNode("//title"); 
     p = doc.DocumentNode.SelectNodes("//p"); 
     foreach(var node in p) 
     { 
      pr = node.InnerText; //that's the text you are looking for 
     } 
     text1.Text = title.InnerText; 
     if (!pr.Equals("") && pr != "") 
     { 
      text2.Text = pr; 
     } 
     else 
     { 
      MessageBox.Show("null"); 
     } 
    } 

我用if塊來確定foreach是否返回空。有人知道如何解決這個問題嗎?我會感謝任何幫助。謝謝。

回答

0

你的代碼沒有問題,但它可能不符合你的期望。 foreach循環迭代所有段落(在提供的url的情況下總共13個段落)。由於最後一段爲空,所以pr在最後一次迭代後將爲空。

如果你想填補text2所有的段落,你應該改變這樣的代碼:如果你想pr包含可讀文本,您需要將的innerText解碼,因爲它可以包含HTML實體,如

pr += node.innerText; 

&gt;。你可以這樣做:

pr += HtmlEntity.DeEntitize(node.innerText); 

希望這會有所幫助。

1

嘗試做:

p = doc.DocumentNode.SelectNodes(".//p"); 

代替:

p = doc.DocumentNode.SelectNodes("//p"); 

因爲p是一個類型的標籤,而不是一個類或ID。