Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako prevádzate súbor XML na zoznam v C?

C nemá zabudované schopnosti analýzy XML. Budete musieť použiť externú knižnicu. Najbežnejšou voľbou je libxml2. Takto môžete previesť súbor XML na zoznam prvkov (v tomto príklade ako reťazce, ale môžete ho prispôsobiť zložitejším dátovým štruktúram) pomocou libxml2:

1. Nainštalujte libxml2:

Budete musieť nainštalovať vývojový balík libxml2. Presný príkaz závisí od vášho systému:

* debian/ubuntu: `sudo apt-get nainštalovať libxml2-dev`

* fedora/centos/rhel: `sudo yum inštalovať libxml2-devel`

* macos (pomocou homebrew): `Brew Install libxml2`

2. Zostaviť s libxml2:

Pri zostavovaní kódu C sa nezabudnite prepojiť proti knižnici libxml2. Typický príkaz na kompiláciu by vyzeral takto:

`` `Bash

GCC your_program.c -o your_program -lxml2

`` `

3. C kód (pomocou libxml2):

`` C

#include

#include

#vrátane

#vrátane

// Štruktúra, ktorá predstavuje prvok zoznamu (toto si môžete prispôsobiť)

typedef struct {

char *elementName;

char *elementValue;

} ListElement;

// Funkcia na prevod XML na zoznam prvkov

Zoznam *xmltoList (const char *xmlfilePath, int *listSize) {

XMLDOC *DOC =XMLREADFILE (XMLFILEPATH, NULL, 0);

if (doc ==null) {

fprintf (stderr, "Nepodarilo sa analyzovať súbor XML:%s \ n", xmlfilePath);

návrat null;

}

xmlnode *root =xmldocgetRootelement (DOC);

if (root ==null) {

fprintf (stderr, "Prázdny dokument XML \ n");

xmlfreedoc (DOC);

návrat null;

}

// Simple TraverSal - Prispôsobte sa pre zložitejšie XML štruktúry

Zoznam *list =null;

int count =0;

xmlnode *cur =root-> deti;

while (cur! =null) {

if (cur-> typ ==xml_element_node) {

počet ++;

List =realloc (zoznam, count * sizeof (listElement));

if (zoznam ==null) {

fprintf (stderr, „alokácia pamäte zlyhala \ n“);

xmlfreedoc (DOC);

návrat null;

}

zoznam [count-1] .elementName =(char *) xmlgetProp (cur, (xmlchar *) "name"); // Príklad - Získajte atribút „Name“

if (zoznam [count-1] .elementName ==null) Zoznam [count-1] .elementName =(char*) cur-> name;

zoznam [count-1] .elementValue =(char *) xmlnodegetContent (cur);

}

cur =cur-> Ďalej;

}

*zoznamSize =count;

xmlfreedoc (DOC);

Zoznam návratov;

}

int main () {

const char *xmlfilePath ="your_file.xml"; // Nahraďte svojou cestou súboru XML

int ListSize;

LEATElement *MyList =XMLTOLIST (XMLFILEPATH, &LISTSIZE);

if (mylist! =null) {

printf ("XML prevedený na zoznam:\ n");

pre (int i =0; i printf ("Názov prvku:%s, hodnota:%s \ n", mylist [i] .elementName, mylist [i] .elementValue);

xmlfree ((xmlchar*) mylist [i] .elementName);

xmlfree ((xmlchar*) mylist [i] .elementValue);

}

zadarmo (mylist);

}

xmlcleanupparser ();

návrat 0;

}

`` `

4. `your_file.xml` príklad:

`` xml

Toto je Apple

Toto je banán

Táto položka nemá žiadny atribút názov

`` `

Dôležité úvahy:

* Manipulácia s chybami: Kód obsahuje základné spracovanie chýb, ale mali by ste pridať robustnejšie kontroly aplikácií v reálnom svete.

* Správa pamäte: Libxml2 používa svoju vlastnú správu pamäte; Uistite sa, že ste pridelenú pamäť uvoľnili pomocou `xmlfreedoc`,` xmlfree` a `free`, keď ste hotoví s údajmi.

* XML Štruktúra: Tento kód predpokladá jednoduchú štruktúru XML. Pre zložitejšie XML budete potrebovať sofistikovanejší prístup, pravdepodobne použijete rekurzívne funkcie na prechádzanie stromu XML. Budete tiež musieť primerane zvládnuť atribúty a vnorené prvky.

* Reprezentácia údajov: Štruktúra `ListElement` je veľmi základná. Budete ho chcieť upraviť tak, aby reprezentovali skutočné údaje, ktoré potrebujete zo súboru XML. Zvážte použitie vhodnejších dátových štruktúr, ako sú prepojené zoznamy alebo stromy pre zložitejšie súbory XML.

Nezabudnite nahradiť „your_file.xml“ `skutočnou cestou k vášmu súboru XML. Tento vylepšený príklad vám poskytuje solídnejší základ pre prácu s XML v C pomocou libxml2. Avšak pre čokoľvek, čo presahuje veľmi jednoduché súbory XML, starostlivo zvážte použitie výkonnejšej knižnice spracovania XML, pravdepodobne v jazyku, ktorý je pre túto úlohu lepšie, ako C. (Python s `xml.etree.elementtree` alebo podobné knižnice sú často oveľa jednoduchšie.)

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené