代码之家  ›  专栏  ›  技术社区  ›  Mark Stouffer

htmlagilitypack childnodes索引起作用,命名节点不起作用

  •  0
  • Mark Stouffer  · 技术社区  · 16 年前

    我正在用htmlagilitypack解析xml api响应。我可以从api调用中选择结果项。 然后循环遍历这些项,并将childnodes写入表。当我选择 子节点,比如说:

    sItemId = dnItem.ChildNodes(0).innertext
    

    我得到了正确的项目ID结果。但当我尝试:

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

    我得到“被引用对象的值为‘Nothing’。”

    我试过“itemid[1]”、“/itemid[1]”和一系列字符串。我试过selectsinglenode和childnodes.item(“itemid”).innertext。唯一有效的方法就是使用索引。

    使用索引的问题是,有时子元素会在结果中被忽略,从而导致索引丢失。

    有人知道我做错了什么吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Dragos Durlut    16 年前
    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,并根据需要对其进行了修改。 祝你好运!

    推荐文章