#html #c #libxml2
#HTML #c #libxml2
Вопрос:
У меня есть htmlDocPtr htmlfile = htmlParseFile(localfileurl, NULL)
.
Локальный HTML-файл
<!DOCTYPE html>
<html>
<head>
<meta></meta>
<title>Page Title</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
</body>
</html>
Я хочу в конечном итоге сохранить заголовок страницы в char variable
Я пробовал
htmlNodePtr node = xmlDocGetRootElement(htmlfile);
// title is on the following
node = node->children->next->children->next->next->next;
Как мне теперь получить значение title
Ответ №1:
Пройдите по документу, найдите элемент с именем «title» и получите его содержимое:
static void printTitle(xmlDoc *doc, xmlNode * a_node)
{
xmlNode *cur_node = NULL;
for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
if (cur_node->type == XML_ELEMENT_NODE amp;amp; !xmlStrcmp(cur_node->name, (const xmlChar *)"title")) {
xmlChar* content;
content = xmlNodeListGetString(doc, cur_node->xmlChildrenNode, 1);
printf("node type: Element, name: %s, content: %sn", cur_node->name, content);
xmlFree(content);
}
printTitle(doc, cur_node->children);
}
}
int main(int argc, char **argv)
{
xmlDoc *doc = NULL;
xmlNode *root_element = NULL;
if (argc != 2)
return(1);
LIBXML_TEST_VERSION
doc = xmlReadFile(argv[1], NULL, 0);
if (doc == NULL) {
printf("error: could not parse file %sn", argv[1]);
}
root_element = xmlDocGetRootElement(doc);
printTitle(doc, root_element);
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
(См. Раздел Извлечение содержимого элемента)
Комментарии:
1. спасибо, цикл, который я пробовал, был запущен, но не находил заголовок. и цикл не работал, потому что для достижения titlte вам нужно перейти next-> next->next, поэтому current_node-> next не будет работать. Я также прочитал учебник. Спасибо, потому что то, что я искал, было
content = xmlNodeListGetString
. Я отказался от цикла и должен был найти заголовок вручную