Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rickcoyote

[Resolvido] Extrair dados de arquivo xml

Recommended Posts

Olá a todos, sou novo aqui no forum e recorro a vcs para tentar resolver um problema

Estou com um pequeno programa para fazer, preciso extrair alguns dados de um arquixo xml, mas nao sei como faço para ler somente os dados contidos nas tags. Preciso apenas extrair os dados das tags e atribuir a sua respectiva variavel.

o xml é este:

 

<?xml version = "1.0" encoding = "UTF-8"?>

<CASAS>
   <MODERNA> quantidade = "1"
	  <FERRO>5</FERRO>
	<MADEIRA>20</MADEIRA>
	<VIDRO>16</VIDRO>
	<TINTA>7</TINTA>
	<TIJOLO>17</TIJOLO>
   </MODERNA>

   <MEDITERRANEA> quantidade = "1"
	  <FERRO>7</FERRO>
	<MADEIRA>18</MADEIRA>
	<VIDRO>12</VIDRO>
	<TINTA>9</TINTA>
	<TIJOLO>21</TIJOLO>
   </MEDITERRANEA>

   <COLONIAL> quantidade = "1"
	  <FERRO>6</FERRO>
	<MADEIRA>25</MADEIRA>
	<VIDRO>8</VIDRO>
	<TINTA>5</TINTA>
	<TIJOLO>13</TIJOLO>
   </COLONIAL>

</CASAS>

Consigo extrair todos os dados e mostrar o xml inteiro na tela, falta agora extrair apenas os dados contidos nas tags.

Se alguem souber como me ajudar, desde ja fico grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o codigo q tenho ate agora!

 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>	 

int main(){

/*Abrir o XML*/
FILE *xml;
xml=fopen("casas.xml","r");
			/*Verificar se conseguiu*/
			if(!xml){
					 system("cls");
					 printf("Programa Leitor de XML 1.0 \n \n");
					 printf("\n Erro ao abrir arquivo XML ... \n ");
					 printf("\n O Programa sera fechado, verifique o arquivo XML! \n \n \n \n");
					 system("pause");
					 return(0);
			};
					  


/*Interface do Programa*/
	/*Declaraçao de Variaveis*/
	int opc,qtd;
		
	/*Tela Principal*/
	printf("Programa Leitor de XML 1.0 \n \n");
	printf("\n 1 - Moderna \n");
	printf(" 2 - Mediterranea \n");
	printf(" 3 - Colonial \n");
	printf("\n 4 - Mostrar XML na Tela");
	printf("\n 0 - Sair \n \n");
	printf("Selecione o tipo de Casa Desejada: ");
	scanf("%d",&opc);
	
	/*Testa se a opçao escolhida é valida*/
	while(opc>4){ 
			  system("cls");
			  printf("Programa Leitor de XML 1.0 \n \n");
			  printf ("Opcao Invalida, Digite umas das Opcoes Abaixo! \n \n");
			  printf("\n 1 - Moderna \n");
			  printf(" 2 - Mediterranea \n");
			  printf(" 3 - Colonial \n");
			  printf("\n 4 - Mostrar XML na Tela");
			  printf("\n 0 - Sair \n \n");
			  printf("Selecione o tipo de Casa Desejada: ");
			  scanf("%d",&opc);
	};
	
	/*Tomada de Decisao*/
	switch(opc){
				/*Opçao "Sair"*/
				case 0:
					 system("cls");
					 system("color 09");
					 printf("Programa Leitor de XML 1.0 \n \n");
					 printf("\n Desenvolvido por JR \n \n");
					 printf("\n Obrigado por usar nosso Programa! \n \n");
					 break;
					 
				/*Opçao "Moderna"*/
				case 1:
					 system("cls");
					 printf("Programa Leitor de XML 1.0 \n \n");
					 printf("..:: Casa Moderna ::.. \n \n");
					 printf(" Entre com a quantidade de Casa(s) a ser(em) Construida(s):");
					 scanf("%d",&qtd);
					 printf("\n Quantidade de material necessario para construir %d casa(s): \n \n",qtd);
					 break;
				
				/*Opçao "Mediterranea"*/
				case 2:
					 system("cls");
					 printf("Programa Leitor de XML 1.0 \n \n");
					 printf("..:: Casa Mediterranea ::.. \n \n");
					 printf(" Entre com a quantidade de Casa(s) a ser(em) Construida(s):");
					 scanf("%d",&qtd);
					 printf("\n Quantidade de material necessario para construir %d casa(s): \n \n",qtd);
					 break;
				
				/*Opçao "Colonial"*/
				case 3:
					 system("cls");
					 printf("Programa Leitor de XML 1.0 \n \n");
					 printf("..:: Casa Colonial ::.. \n \n");
					 printf(" Entre com a quantidade de Casa(s) a ser(em) Construida(s):");
					 scanf("%d",&qtd);
					 printf("\n Quantidade de material necessario para construir %d casa(s): \n \n",qtd);
					 break;
					 
				/*Opçao "Mostrar XML na Tela"*/
				case 4:
					 /*Variaveis Locais*/
					 int mxml;
					 /*Mostra o XML*/
					 system("cls");
					 printf("Programa Leitor de XML 1.0 \n \n");
					 printf("\n \n");
					 while((mxml= getc (xml)) !=EOF){
								  printf("%c", mxml);
					 };
					 break;
				
				
	};  
					 
				
system("pause");	
};

na opcao 1 , 2 ou 3, ele tem q multiplicar a quantidade de casas pela quantidade de material q cada tipo necessita e mostra na tela, mas para eu fazer essa multiplicaçao, necessito extrair essas quantidades do arquivo xml e atribuir a variaveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem várias formas de fazer isso.

 

Teste isso:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

/*Abrir o XML*/
   FILE *xml;
   char leitura[255];
   char *str, *str1;
   char casa[16];
   xml=fopen("casas.xml","r");
/*Verificar se conseguiu*/
   if(!xml){
	  return(0);
   }

   printf("Digite o tipo de casa\n");
   scanf("%s", casa);

   while(fgets(leitura, sizeof(leitura), xml) ) {

	  str = strtok(leitura, "<>");
	  printf("%s\n", str);
	  str = strtok(NULL, "<>");
	  printf("%s\n", str);
	  if(str!=NULL){
		 if(!strcmp(str, casa)){
			fgets(leitura, sizeof(leitura), xml);

			str = strtok(leitura, "\t<>");
			printf("%s\n", str);
			str1 = strtok(NULL, "<>");
			printf("Ferro vai receber isso: %s\n", str1);
			fgets(leitura, sizeof(leitura), xml);

			str = strtok(leitura, "\t<>");
			printf("%s\n", str);
			str1 = strtok(NULL, "<>");
			printf("Madeira vai receber isso: %s\n", str1);
			fgets(leitura, sizeof(leitura), xml);

			str = strtok(leitura, "\t<>");
			printf("%s\n", str);
			str1 = strtok(NULL, "<>");
			printf("Vidro vai receber isso: %s\n", str1);
			fgets(leitura, sizeof(leitura), xml);

			str = strtok(leitura, "\t<>");
			printf("%s\n", str);
			str1 = strtok(NULL, "<>");
			printf("Tinta vai receber isso: %s\n", str1);
			fgets(leitura, sizeof(leitura), xml);

			str = strtok(leitura, "\t<>");
			printf("%s\n", str);
			str1 = strtok(NULL, "<>");
			printf("Tijolo vai receber isso: %s\n", str1);

			break;
		 }
	  }
   }
};

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.