Comment libxml2 peut-il être utilisé pour parsingr des données à partir de XML?

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).

http://xmlsoft.org/html/libxml-tree.html#xmlNode

http://xmlsoft.org/html/libxml-tree.html#xmlAttr

Ici, j’ai mentionné le processus complet d’extraction des données XML / HTML d’un fichier sur la plate-forme Windows.

  1. Premier téléchargement du formulaire .dll précompilé http://xmlsoft.org/sources/win32/
  2. Téléchargez également ses dépendances iconv.dll et zlib1.dll à partir de la même page

  3. Extrayez tous les fichiers .zip dans le même répertoire. Pour Ex: D: \ demo \

  4. Copiez iconv.dll , zlib1.dll et libxml2.dll dans le répertoire c: \ windows \ system32

  5. 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; } 
  6. Ouvrez Prom Studio Command Promt

  7. Aller à D: \ répertoire de démonstration

  8. 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

  9. 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)