// Structuur om een lijstelement weer te geven (u kunt dit aanpassen)
typedef-structuur {
char *elementNaam;
char *elementWaarde;
} LijstElement;
// Functie om XML naar een lijst met elementen te converteren
ListElement* xmlToList(const char *xmlFilePath, int *listSize) {
xmlDoc *doc =xmlReadFile(xmlFilePath, NULL, 0);
als (doc ==NULL) {
fprintf(stderr, "Kan XML-bestand niet parseren:%s\n", xmlFilePath);
retourneer NULL;
}
xmlNode *root =xmlDocGetRootElement(doc);
als (wortel ==NULL) {
fprintf(stderr, "Leeg XML-document\n");
xmlFreeDoc(doc);
retourneer NULL;
}
// Eenvoudige traversal - aanpassen voor complexere XML-structuren
LijstElement *lijst =NULL;
int-aantal =0;
xmlNode *cur =root->children;
terwijl (cur !=NULL) {
if (cur->type ==XML_ELEMENT_NODE) {
tellen++;
lijst =realloc(lijst, aantal * groottevan(LijstElement));
als (lijst ==NULL) {
fprintf(stderr, "Geheugentoewijzing mislukt\n");
xmlFreeDoc(doc);
retourneer NULL;
}
lijst[aantal-1].elementName =(char *)xmlGetProp(cur, (xmlChar *)"naam"); //Voorbeeld - haal het attribuut "naam" op
if (lijst[aantal-1].elementName ==NULL) lijst[aantal-1].elementName =(char*)cur->naam;
lijst[aantal-1].elementValue =(char *)xmlNodeGetContent(cur);
}
cur =huidige->volgende;
}
*lijstgrootte =aantal;
xmlFreeDoc(doc);
retourlijst;
}
int hoofd() {
const char *xmlFilePath ="uw_bestand.xml"; // Vervang door uw XML-bestandspad
int lijstGrootte;
LijstElement *mijnLijst =xmlToList(xmlFilePath, &listSize);
if (mijnLijst !=NULL) {
printf("XML geconverteerd naar lijst:\n");
for (int i =0; i
printf("Elementnaam:%s, Waarde:%s\n", mijnLijst[i].elementName, mijnLijst[i].elementValue);
xmlFree((xmlChar*)mijnLijst[i].elementNaam);
xmlFree((xmlChar*)mijnLijst[i].elementValue);
}
gratis(mijnLijst);
}
xmlCleanupParser();
retour 0;
}
```
4. `uw_bestand.xml` voorbeeld:
```xml
- Dit is een appel
- Dit is een banaan
- Dit item heeft geen naamattribuut
```
Belangrijke overwegingen:
* Foutafhandeling: De code omvat basisfoutafhandeling, maar u zou robuustere controles voor toepassingen in de echte wereld moeten toevoegen.
* Geheugenbeheer: Libxml2 gebruikt zijn eigen geheugenbeheer; zorg ervoor dat u het toegewezen geheugen vrijmaakt met `xmlFreeDoc`, `xmlFree` en `free` wanneer u klaar bent met de gegevens.
* XML-structuur: Deze code gaat uit van een eenvoudige XML-structuur. Voor complexere XML heb je een meer geavanceerde aanpak nodig, waarbij je waarschijnlijk recursieve functies gebruikt om de XML-boom te doorkruisen. U moet ook op de juiste manier omgaan met attributen en geneste elementen.
* Gegevensrepresentatie: De `ListElement`-structuur is erg eenvoudig. U wilt het aanpassen zodat het de daadwerkelijke gegevens weergeeft die u nodig heeft uit uw XML-bestand. Overweeg het gebruik van geschiktere datastructuren zoals gekoppelde lijsten of bomen voor complexere XML-bestanden.
Vergeet niet om `"uw_bestand.xml"` te vervangen door het daadwerkelijke pad naar uw XML-bestand. Dit verbeterde voorbeeld geeft u een steviger fundament voor het werken met XML in C met behulp van libxml2. Overweeg echter zorgvuldig om voor alles wat verder gaat dan zeer eenvoudige XML-bestanden een krachtigere XML-verwerkingsbibliotheek te gebruiken, mogelijk in een taal die beter geschikt is voor deze taak dan C. (Python met `xml.etree.ElementTree` of vergelijkbare bibliotheken zijn vaak veel eenvoudiger.)