2009-04-30 3 views
0

ich dieses Programm bin mit einer Liste aller HTML-Tags in einer bestimmten Datei anzuzeigen:Erste HTML-Attribute von DOM Bäume (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; 

} 

Wie bekomme ich es auch die Attribute angezeigt werden (zB href="something" für <a>)?

Antwort

0

Es scheint, gibt es kein solches Feld:

[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’ 

=== === EDIT

Wenn ich so etwas tun:

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

ich den Namen der Attribut - "href"

Wenn ich einen Schritt weiter gehe:

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

Ich bekomme "Text", aber nicht den tatsächlichen Link.