Проблема XPath, получение выражения должно быть оценено с помощью набора узлов. ошибка

.net c# html-agility-pack node-set xpath

Вопрос

У меня возникли проблемы с получением одного узла по его явному XPath, который я уже нашел другими способами. У меня есть узел, и я могу получить его XPath, но когда я попытаюсь получить тот же узел снова на этот раз через node.XPath, он дает ошибку «выражение должен оцениваться с помощью узла». Разве это не работает? Я использую HtmlAgilityPack в C # btw для HtmlDocument.

HtmlDocument doc = new HtmlDocument();
doc.Load(@"..\..\test1.htm");
HtmlNode node = doc.DocumentNode.SelectSingleNode("(//node()[@id='something')])[first()]");
HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath);

BTW: это значение node.XPath:

"/html[1]/body[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[2]/table[1]/tr[1]/td[1]/div[1]/div[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[4]/div[2]/div[1]/div[1]/div[4]/#text[2]"

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

Мне удалось заставить его работать, заменив #text на функцию text (). Я не уверен, почему это не просто испустило XPath таким образом, в первую очередь.

HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath.Replace("#text","text()");

Популярные ответы

Ваш XPath заканчивается на «#text [2]», что означает «второй» атрибут текста. Атрибуты - это не узлы, они - метаданные узлов.
Это обычная проблема, с которой я столкнулся с XPath: необходимость значения атрибута, в то время как операция XPath абсолютно необходима для извлечения узла.

Решение, которое я использовал для этого, заключается в том, чтобы обнулить мой XPath с помощью чего-то, что обнаруживает и удаляет часть атрибута строки (посредством вызова метода myXPathString.LastIndexOf («#»)), а затем использует усеченную myXPathString для извлечения узел и собрать требуемое значение атрибута в качестве второго шага.

Надеюсь, это поможет,
J



Related

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