2010-03-11 35 views
0

我正在用HTMLAgilityPack解析XML API響應。我可以從API調用中選擇結果項目。 然後,我遍歷這些項目並希望將ChildNodes寫入一個表格。當我說有點像選擇 的childNodes:HTMLAgilityPack ChildNodes索引起作用,命名節點不是

sItemId = dnItem.ChildNodes(0).innertext 

獲得正確的itemId結果。但是當我嘗試時:

sItemId = dnItem.ChildNodes("itemId").innertext 

我得到「引用的對象的值爲'Nothing'」。

我試過「itemID [1]」,「/ itemId [1]」和各種字符串。我試過SelectSingleNode和ChildNodes.Item(「itemId」)。innertext。唯一有效的是使用索引。

使用索引的問題是,有時子元素在結果中被忽略,並且拋出索引。

有人知道我在做什麼錯嗎?

回答

1
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument(); 
htmlDoc.LoadHtml(@webHTMLeditor.TextXhtml); 
HtmlNodeCollection tableRows = htmlDoc.DocumentNode.SelectNodes("//tr"); 
for (int i = 0; i < tableRows.Count; i++) 
{ 
    HtmlNode tr = tableRows[i]; 

    HtmlNode[] td = new HtmlNode[2]; 
    string xpath = tr.XPath + "//td"; 
    HtmlNodeCollection cellRows = tr.SelectNodes(@xpath); 
    //td[0] = tr.ChildNodes[1];     
    //td[1] = tr.ChildNodes[3]; 
    try 
    { 
     td[0] = cellRows[0]; 
     td[1] = cellRows[1]; 
    } 
    catch (Exception) 
    { } 
    //etc 
} 

該代碼用於從表中逐行提取數據,每行按單元格提取數據。 我使用了現有的xpath,並根據我的需要對其進行了修改。 祝你好運!

+0

您是否在tr的SelectNodes中使用了完整的xpath?我正在嘗試這個,它不工作。我認爲ChildNodes或SelectNodes方法會使用相對的XPath,但我可以做任何一個。 但它不在這裏工作。 – 2010-03-12 17:59:21

+0

是的,我正在使用完整的Xpath。它是由提供的Xpath。它看起來像「// table [1] // tbody [1] // tr [1]」,我添加了「// td」以從該特定的表格行中獲取TableData。 我更喜歡這個問題,因爲我不能保證所有的都會有相同的孩子結構。 – 2010-03-13 11:22:48

+0

此外,如果它是任何使用您嘗試使用HAP資源管理器 http://htmlagilitypack.codeplex.com/releases/view/33903#DownloadId=86142 這樣您可以看到如何構建xpath。祝你好運! – 2010-03-13 11:45:55