J’ai jeté un coup d’œil sur les exemples de code libxml2 et je ne sais pas comment les assembler.
Quelles sont les étapes à suivre lors de l’utilisation de libxml2 pour parsingr ou extraire simplement les données d’un fichier XML?
Je voudrais obtenir et éventuellement stocker des informations pour certains atsortingbuts. Comment est-ce fait?
Je crois que vous devez d’abord créer un arbre d’parsing. Peut-être que cet article peut vous aider, consultez la section Comment parsingr un arbre avec Libxml2 .
J’ai trouvé ces deux ressources utiles lorsque j’apprenais à utiliser libxml2 pour créer un parsingur de stream RSS.
Tutoriel avec interface SAX
Tutoriel utilisant l’arborescence DOM (exemple de code permettant d’obtenir une valeur d’atsortingbut incluse)
libxml2 fournit divers exemples illustrant l’utilisation de base.
http://xmlsoft.org/examples/index.html
Tree1.c serait probablement le plus pertinent pour vos objectives déclarés.
tree1.c: Navigue dans une arborescence pour imprimer les noms d’éléments
Analyser un fichier dans une arborescence, utilisez xmlDocGetRootElement () pour obtenir l’élément racine, puis parcourez le document et imprimez le nom de l’élément dans l’ordre.
http://xmlsoft.org/examples/tree1.c
Une fois que vous avez une structure xmlNode pour un élément, le membre “properties” est une liste d’atsortingbuts liée. Chaque object xmlAttr a un object “name” et un object “children” (qui sont respectivement le nom / la valeur de cet atsortingbut) et un membre “next” qui pointe vers l’atsortingbut suivant (ou null pour le dernier).
Ici, j’ai mentionné le processus complet d’extraction des données XML / HTML d’un fichier sur la plate-forme Windows.
Téléchargez également ses dépendances iconv.dll et zlib1.dll à partir de la même page
Extrayez tous les fichiers .zip dans le même répertoire. Pour Ex: D: \ demo \
Copiez iconv.dll , zlib1.dll et libxml2.dll dans le répertoire c: \ windows \ system32
Créez le fichier libxml_test.cpp et copiez le code suivant dans ce fichier.
#include #include #include #include void traverse_dom_trees(xmlNode * a_node) { xmlNode *cur_node = NULL; if(NULL == a_node) { //printf("Invalid argument a_node %p\n", a_node); return; } for (cur_node = a_node; cur_node; cur_node = cur_node->next) { if (cur_node->type == XML_ELEMENT_NODE) { /* Check for if current node should be exclude or not */ printf("Node type: Text, name: %s\n", cur_node->name); } else if(cur_node->type == XML_TEXT_NODE) { /* Process here text node, It is available in cpStr :TODO: */ printf("node type: Text, node content: %s, content length %d\n", (char *)cur_node->content, strlen((char *)cur_node->content)); } traverse_dom_trees(cur_node->children); } } int main(int argc, char **argv) { htmlDocPtr doc; xmlNode *roo_element = NULL; if (argc != 2) { printf("\nInvalid argument\n"); return(1); } /* Macro to check API for match with the DLL we are using */ LIBXML_TEST_VERSION doc = htmlReadFile(argv[1], NULL, HTML_PARSE_NOBLANKS | HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING | HTML_PARSE_NONET); if (doc == NULL) { fprintf(stderr, "Document not parsed successfully.\n"); return 0; } roo_element = xmlDocGetRootElement(doc); if (roo_element == NULL) { fprintf(stderr, "empty document\n"); xmlFreeDoc(doc); return 0; } printf("Root Node is %s\n", roo_element->name); traverse_dom_trees(roo_element); xmlFreeDoc(doc); // free document xmlCleanupParser(); // Free globals return 0; }
Ouvrez Prom Studio Command Promt
Aller à D: \ répertoire de démonstration
exécuter cl libxml_test.cpp /I”.\libxml2-2.7.8.win32\include “/I”.\iconv-1.9.2.win32\include” / link libxml2-2.7.8.win32 \ lib \ libxml2.lib commander
Exécutez le binary à l’aide de la commande test.html de libxml_test.exe (ici, test.html peut être n’importe quel fichier HTML valide)