• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NoOne

XML Parser, C

14 mensagens neste tópico

Boa noite,

Estou a desenvolver um projecto em que numa parte a ser programada em C devo receber dados num ficheiro XML. As minhas questões são:

- Que Parsers indicam?

- Qual o mais simples de trabalhar?

É só mesmo para fazer parse de um simples documento XML.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o documento é simples, podias fazer tu o parse. Evitavas matar uma formiga com um canhão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

era so mesmo para um XML do género:

<lista-urls>

    <link>

              <url>blabla</url>

    </link>

    <link>

              <url>blabla</url>

    </link>

</lista-urls>

Eu tenho estado muito atarefado com a parte de Java deste projecto e por isso ainda não tive muito tempo para dedicar à parte de C... Alguém um exemplo assim muito simples? Seria uma ajuda enorme.

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar o lex (eventualmente em conjunto com o yacc) para resolves o problema.

Ou tens a libxml do GNOME...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar o lex (eventualmente em conjunto com o yacc) para resolves o problema.

Ou tens a libxml do GNOME...

Pois eu ja tive a ver a libxml mas não percebi muito aquilo...  acho que tinha que instalar o iconv, mas tambem não percebi muito daquilo lol... e como isto é um codigo XML simples pensei que alguém tivesse um pequeno exemplo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que fazer alguma validação? Ou podes assumir que o ficheiro é sempre válido?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que fazer alguma validação? Ou podes assumir que o ficheiro é sempre válido?

É sempre um ficheiro válido porque é gerado e validado por mim em Java...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim sendo, se fosse eu fazia código para procurar pelas tags e retirar directamente o conteúdo que pretendia, em vez de estar a utilizar uma framework. Se o conteúdo do url é tudo o que precisas, basta leres as linhas sucessivamente, procurar por "<url>", procurar por "</url>", e se forem ambos encontrados, copiar o que está no meio.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim sendo, se fosse eu fazia código para procurar pelas tags e retirar directamente o conteúdo que pretendia, em vez de estar a utilizar uma framework. Se o conteúdo do url é tudo o que precisas, basta leres as linhas sucessivamente, procurar por "<url>", procurar por "</url>", e se forem ambos encontrados, copiar o que está no meio.

eu ja consigo ficar só com as linhas em que tem:

<url>  {texto}  </url>

só nao consigo é retirar o que está dentro das tags...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas por eliminar os espaços no início da linha (e eventualmente no fim), e depois eliminas 5 caracteres no início e 6 no fim (isto se não tiver lá o \n).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas por eliminar os espaços no início da linha (e eventualmente no fim), e depois eliminas 5 caracteres no início e 6 no fim (isto se não tiver lá o \n).

Pois, já pesquisei e não estou a conseguir fazer isso...

eu tinha uma "solução" semelhante:

char * substring(int start, int stop, char *text)
{
char *dst;
sprintf(dst, "%.*s", stop - start, &text[start]);
return dst;
}

No start punha 5 e no stop punha strlen-5...

Num array de strings tinha as linhas que tinham os urls e depois chamava essa função... Só que não estava a funcionar bem... só funcionava para o primeiro elemento do vector...

:-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estás a alocar espaço para a string:

char *dst = (char*)malloc(sizeof(char)*(stop-start+1));

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estás a alocar espaço para a string:

char *dst = (char*)malloc(sizeof(char)*(stop-start+1));

nunca me lembrei disso... Obrigadao :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também podes usar a função strtok, na 1ª chamada com '>' e na 2ª com '<' como delimitadores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora