2009-04-30 6 views
0

Я использую эту программу, чтобы отобразить список всех тегов HTML в данном файле:Получение HTML атрибуты DOM деревьев (Libxml)

#include <cstdio> 
#include <libxml/HTMLparser.h> 
#include <libxml/tree.h> 
#include <iostream> 
#include <cstring> 

using namespace std; 

static void 
print_element_names(htmlNodePtr a_node) 
{ 
    htmlNodePtr cur_node = NULL; 

    for (cur_node = a_node; cur_node!=NULL; cur_node = cur_node->next) { 
      printf("node type: Element, name: %s\n", cur_node->name); 
     print_element_names(cur_node->children); 
    } 
} 

int main(int argc, char **argv) { 

    htmlDocPtr doc; 
    htmlNodePtr root_node; 

    doc = htmlReadFile(argv[1], NULL, 0); 
    root_node = xmlDocGetRootElement(doc); 

    print_element_names(root_node); 

    xmlFreeDoc(doc); 

    xmlCleanupParser(); 

    return 0; 

} 

Как получить его, чтобы отобразить атрибуты, а также (например, href="something" для <a>)?

ответ

0

Кажется, нет такого поля:

[email protected]:~/Prog_zesp> g++ `xml2-config --cflags --libs` -o tester tester.cpp 
tester.cpp: In function ‘void print_element_names(xmlNode*)’: 
tester.cpp:17: error: ‘struct _xmlNode’ has no member named ‘attributes’ 

=== РЕДАКТИРОВАТЬ ===

Если я что-то вроде этого:

if (strcmp((char *)cur_node->name, "a")==0) { 
     cout << cur_node->properties->name << endl; 

Я получаю имя из атрибут - "href"

Если вы хотите сделать еще один шаг:

if (strcmp((char *)cur_node->name, "a")==0) { 
      cout << cur_node->properties->children->name << endl; 

Получаю «текст», но не фактическую ссылку.