Индекс HTMLAgilityPack ChildNodes работает, именованный узел не

html-agility-pack selectsinglenode

Вопрос

Я анализирую ответ XML API с помощью HTMLAgilityPack. Я могу выбрать элементы результата из вызова API. Затем я просматриваю элементы и хочу записать ChildNodes в таблицу. Когда я выбираю ChildNodes, говоря что-то вроде:

sItemId = dnItem.ChildNodes(0).innertext

Я получаю правильный результат itemId. Но когда я пытаюсь:

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

Я получаю: «Связанный объект имеет значение« Ничего ».

Я попробовал «itemID [1]», «/ itemId [1]» и верность строк. Я пробовал SelectSingleNode и ChildNodes.Item ("itemId"). Innertext. Единственный, кто работал, - это использовать индекс.

Проблема с использованием индекса заключается в том, что иногда дочерние элементы опускаются в результатах и ​​отбрасывают индекс.

Кто-нибудь знает, что я делаю неправильно?

Принятый ответ

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, и я изменил его в соответствии с моими потребностями. Удачи!



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow