Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
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
xmlfree ((xmlchar*) mylist [i] .elementName);
xmlfree ((xmlchar*) mylist [i] .elementValue);
}
zadarmo (mylist);
}
xmlcleanupparser ();
návrat 0;
}
`` `
4. `your_file.xml` príklad:
`` xml
`` `
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.)