C não possui recursos de análise XML incorporados. Você precisará usar uma biblioteca externa. A escolha mais comum é libxml2. Veja como você pode converter um arquivo XML em uma lista de elementos (representados como strings neste exemplo, mas você pode adaptá -lo a estruturas de dados mais complexas) usando libxml2:  
 1. Instale libxml2:   Você precisará instalar o pacote de desenvolvimento libxml2. O comando exato depende do seu sistema: 
 * 
 Debian/Ubuntu: `sudo apt-get install libxml2-dev` 
 * 
 fedora/centos/rhel: `sudo yum install libxml2-devel` 
 * 
 macOS (usando homebrew): `Brew Install libxml2`    
 2. Compilar com libxml2:   Lembre -se de vincular a biblioteca Libxml2 ao compilar seu código C. Um comando de compilação típico ficaria assim: 
 `` `BASH 
 gcc your_program.c -o your_program -lxml2 
 `` `   
 3. Código C (usando libxml2):   `` `c 
 #include 
 
 #include  
 #include  
 #include  
 
 // estrutura para representar um elemento de lista (você pode personalizar isso) 
 typedef struct { 
 char *elementName; 
 char *elementValue; 
 } ListElement; 
 
 
 // Função para converter XML em uma lista de elementos 
 ListElement *xmltolist (const char *xmlfilepath, int *listsize) { 
 xmldoc *doc =xmlreadfile (xmlfilepath, null, 0); 
 
 if (doc ==null) { 
 fprintf (stderr, "falhou em analisar o arquivo xml:%s \ n", xmlfilepath); 
 retornar nulo; 
 } 
 
 xmlNode *root =xmlDocGleTroOtelement (doc); 
 
 if (root ==null) { 
 fprintf (stderr, "Documento XML vazio \ n"); 
 xmlfreedoc (doc); 
 retornar nulo; 
 } 
 
 // Traversal simples - adapte -se para estruturas XML mais complexas 
 ListElement *list =null; 
 int conting =0; 
 
 xmlNode *cur =root-> filhos; 
 while (cur! =null) { 
 if (cur-> type ==xml_element_node) { 
 contagem ++; 
 list =realLoc (List, contagem * sizeof (listElement)); 
 if (list ==null) { 
 fprintf (stderr, "alocação de memória falhou \ n"); 
 xmlfreedoc (doc); 
 retornar nulo; 
 } 
 
 lista [count-1] .ElementName =(char *) xmlgetProp (cur, (xmlchar *) "nome"); // Exemplo de atributo "Get" Name " 
 if (list [count-1] .ElementName ==NULL) Lista [count-1] .ElementName =(char*) cur-> nome; 
 
 lista [count-1] .ElementValue =(char *) xmlNodeGetContent (cur); 
 } 
 cur =cur-> a seguir; 
 } 
 
 *listSize =count; 
 xmlfreedoc (doc); 
 lista de retorno; 
 } 
 
 int main () { 
 const char *xmlfilepath ="your_file.xml"; // Substitua pelo seu caminho de arquivo XML 
 int listsize; 
 ListElement *myList =xmltolist (xmlfilepath, &listsize); 
 
 if (mylist! =null) { 
 printf ("XML convertido em lista:\ n"); 
 for (int i =0; i  printf ("Nome do elemento:%s, valor:%s \ n", mylist [i] .ElementName, mylist [i] .ElementValue); 
 xmlfree ((xmlchar*) mylist [i] .ElementName); 
 xmlfree ((xmlchar*) mylist [i] .ElementValue); 
 } 
 grátis (mylist); 
 } 
 
 xmlcleanupParser (); 
 retornar 0; 
 } 
 `` ` 
 
  4. `your_file.xml` Exemplo: 
 
 `` `xml 
  
 -  Esta é uma maçã  
 
-  Esta é uma banana  
 Este item não tem atributo de nome
 
 `` `
 
 
 Considerações importantes:
 
 *  Manuseio de erro: O código inclui manuseio básico de erro, mas você deve adicionar verificações mais robustas para aplicativos do mundo real.
 *  Gerenciamento de memória: Libxml2 usa seu próprio gerenciamento de memória; Certifique -se de libertar a memória alocada usando `xmlfreedoc`,` xmlfree` e `grátis` quando terminar os dados.
 *  Estrutura XML: Este código assume uma estrutura XML simples. Para XML mais complexo, você precisará de uma abordagem mais sofisticada, provavelmente usando funções recursivas para atravessar a árvore XML. Você também precisará lidar com atributos e elementos aninhados adequadamente.
 *  Representação de dados: A estrutura `listElement` é muito básica. Você deseja modificá -lo para representar os dados reais necessários no seu arquivo XML. Considere usar estruturas de dados mais adequadas, como listas ou árvores vinculadas para arquivos XML mais complexos.
 
 
 Lembre -se de substituir `" your_file.xml "` pelo caminho real para o seu arquivo XML. Este exemplo aprimorado fornece uma base mais sólida para trabalhar com XML em C usando o libxml2. No entanto, para qualquer coisa além de arquivos XML muito simples, considere cuidadosamente usar uma biblioteca de processamento XML mais poderosa, possivelmente em um idioma mais adequado a essa tarefa do que C. (Python com `xml.etree.ElementTree` ou bibliotecas similares são frequentemente muito mais simples.)