HTMLAgilityPack ChildNodes index работает, именованный узел не работает
Я анализирую ответ XML API с помощью HTMLAgilityPack. Я могу выбрать элементы результата из вызова API. Затем я перебираю элементы и хочу записать дочерние узлы в таблицу. Когда я выбираю ChildNodes, говоря что-то вроде:
sItemId = dnItem.ChildNodes(0).innertext
Я получаю правильный результат itemId. Но когда я пытаюсь:
sItemId = dnItem.ChildNodes("itemId").innertext
Я получаю "Ссылочный объект имеет значение" Ничего "."
Я пробовал "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 и изменил его в соответствии со своими потребностями. Удачи!