2013-12-13 3 views
0

Я использую функции xpath pugixml для поиска определенных узлов в html-документе (загружаемом через curl).pugixml xpath - node not found

Я использую:

pugi::xml_document doc; 


doc.load_buffer(htmlcontent.c_str(), htmlcontent.size()); 

pugi::xpath_node example= doc.select_single_node("//h2[@class='tv_header']"); 
std::cout << example.node(); 

, который возвращает 0 узлов. Я знаю, что этот узел существует в документе. Я поставил только этот узел внутри строки и нашел узел успешно. Почему узел не найден в документе? Есть ли проблема с кодировкой html-документа?

Спасибо!

ответ

0

Вероятно, что синтаксический анализ вашего документа останавливается перед встречей с узлом.

HTML-документы, как правило, не могут анализироваться синтаксическими анализаторами XML; если ваш документ не является допустимым документом XHTML, вам нужно использовать парсер HTML.

Чтобы убедиться в этом, достаточно взглянуть на объект результата, который возвращается на load_buffer - т.е.

pugi::xml_parse_result res = doc.load_buffer(htmlcontent.c_str(), htmlcontent.size()); 

std::cout << "Parsing result: " << res.description() << std::endl; 
if (!res) std::cout << "Parsing stopped at offset " << res.offset << std::endl; 
+0

Ах спасибо. Я использовал Tidy HTML (кошмар для настройки), и теперь он отлично разбирается. – user3083672