1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ler de XML em C

Discussão em 'Programação' iniciada por X3minater, 27 de Dezembro de 2007. (Respostas: 17; Visualizações: 4052)

  1. X3minater

    X3minater Power Member

    Boas

    Alguém sabe como se faz para ler cenas do ficheiro XML???
    Arranjei este pedaço de código, mas não o consigo preceber:

    while (fgets(s, 90, fp)!=NULL)
    {

    if (strstr(s, wrd)!=NULL)
    {
    fgets(s,90,fp)
    s1=strch(s,'>')
    sscanf(s1,"%d",&s[count].codigo)

    fgets(s,90,fp)
    s1=strch(s,'>')
    sscanf(s1,"%d",&s[count].num_acessos)

    fgets(s,90,fp)
    s1=strch(s,'>')
    sscanf(s1,"%d",&s[11].data)
    }
    count++;
    }

    E depois como é que eu chamo essa função na main? "...leitura(...)"
     
  2. ruivilela

    ruivilela Power Member

    Deita esse pedaço de código para o lixo e procura um módulo completo de um "processador de XML" para C.
     
  3. X3minater

    X3minater Power Member

    O problema é esse! Isso faz parte dum trabalho da Universidade e n posso usar processadores de XML (que também não sei o que é...).

    Se alguém souber fazer isso apenas usando código básico agradecia que respondessem!

    Fikem bem! ;)
     
  4. DarkVenger

    DarkVenger Power Member

    Eu quando trabalhei com XML sabia à priori o formato do ficheiro e por isso fazia uma leitura "normal" tendo em consideração a estrutura do mesmo, usando strch e tal.

    Depois de criares a função chamas no main como outra qualquer função....

    Ps: O código tem comentários.
     
  5. Ola

    Estou com o mesmo problema :sad: como consigo ler em C deste ficheiro .xml:

    <pos>
    <empresa>Empresa X</empresa>
    <fornecedores>
    <fornecedor>
    <id>1</id>
    <nome>BlaBla Lda.</nome>
    <cont>501031034</cont>
    </fornecedor>
    <fornecedor>
    <id>2</id>
    <nome>EuroMilhoes S.A.</nome>
    <cont>505036190</cont>
    </fornecedor>
    </fornecedores>
    </pos>

    Queria ler o conteudo deste ficheiro para estruturas, mas nao estou a conseguir!
    Alguem consegue ajudar-me?
     
    Última edição: 28 de Dezembro de 2007
  6. spastikman

    spastikman Banido


    regex ...

    para apanhar o que está entre as tags usa uma expressão como :

    <cont>(.*?)<\/cont> --> devolveria 501031034 e505036190

    se queres controlar todas as informações que estão entre <fornecedor> e </fornecedor>, é fazer um ciclo que começa quando um fgets apanhar uma string "<fornecedor>" e acaba quando apanhar um "</fornecedor>".

    pelo meio é ler tudo usando a expressão que deixei em cima.

    PS: Não enviei PMs... não faço trabalhos :p
     
  7. greatbunzinni

    greatbunzinni Power Member

    Se queres aceder aos dados definidos por uma linguagem de estruturação de dados então precisas dum analisador sintáctico da linguagem. Se queres fazer um analisador sintáctico da linguagem então precisas de fazer pelo menos uma máquina de estados. Neste caso, com certeza que não te pedem para implementar todas as especificações de XML (nem pedem atributos), o que simplifica a coisa.
     
  8. JoaoRamalho

    JoaoRamalho Power Member

    calma lá pk isto é para o 1ºano de electro
     
  9. Eu tou a fazer fgets() para ler uma linha do ficheiro e depois strstr() para encontrar uma subtring dentro da linha.
    Mas o k acontece é k quando faço o fgets k detecta <cont> na string, o proximo fgets k eu fizer ja vai estar na linha seguinte :sad:

    K poxo fazer?
     
  10. greatbunzinni

    greatbunzinni Power Member

    Eu estou em engenharia civil, nunca me ensinaram C e já fiz um.
     
  11. HiGhVoIcE

    HiGhVoIcE Power Member

    Olá caloirinhos e caloirinhas de LEEC :D

    por acaso ainda hoje à tarde me perguntaram se sabia, vou mostrar este tópico...
     
  12. spastikman

    spastikman Banido



    regex nessa linha para apanhares o que queres ou de uma maneira mais martelada, apanhar tudo o que esteja entre o primeiro ">" e o segundo ">" (strstr para os localizar e strpos para ler fazem isto).
     
  13. Idiroft

    Idiroft I'm cool cuz I Fold

    Epá lol. Por acaso não andas em [email protected] É que eu ando e em programação o projecto final usa um xml igualzinho a esse.

    Não vou obviamente disponibilizar o meu codigo, mas deixo-te uns conselhos.(partindo do principio que o xml não tem erros.

    Usa o fgets para sacar uma linha e depois usa o strstr para podere saber a informação contida em cada linha. Quando encontrar</fornecedor> alocas memoria para um novo elemento da lista de fornecedores.
    Depois, podes fazer um sscanf para sacar a informação util entre as tags e meter nesse novo elemento ou entao, a minha preferida, fazer uma função para eliminar as tags e depois se for preciso usas atoi para converter para int ou aotf se for para float.
    Depois, como deves tar a usar listas dinamicas, fazer um função para inserir cada novo fornecedor à lista (essa função de inserir deve receber o endereço da base da lista e o endereço do novo elemento).

    PS: Pode não ser a melhor maneira de fazer as coisas (eu pessoalmente não conheço melhor), mas foi assim que fiz e funciona 100%.

    cumps
     
  14. z80

    z80 Power Member

    À medida que analisas o ficheiro xml podes ir criando nós de uma ávore que no final da análise representaria a informação contida no ficheiro. Numa só passagem por todos os nós da árvore podes obter todos os campos que pretendes e colocá-los nas estruturas respectivas.

    Claro que a criação desta árvore é mais um nível entre a leitura do ficheiro e o armazenamento da informação.. mas parece-me que facilita tanto a separação de fases de processamento como permite detecção de alguns erros sintácticos no ficheiro xml.


    Agora como analisas o ficheiro... a ideia de detectar as tags '<...>' parece-me boa, isso pode ser feito testando se um caracter é uma abertura de tag, '<', ou fecho de tag '>'. Se encontras uma abertura de tag, começas a guardar todos os caracteres que lês, para quando atingires um fim de tag, tens disponível o nome da tag.

    Assim no final de uma tag, p.ex. '<fornecedor>', sabes que estás perante uma definicao de fornecedor.
     
    Última edição: 23 de Fevereiro de 2009
  15. Boas ideias, vou tentar.
    Obrg
    :D
     
  16. greatbunzinni

    greatbunzinni Power Member

    Acabas de dizer, apesar duma maneira um pouco atabalhoada, o funcionamento dum analisador sintáctico.
     
  17. z80

    z80 Power Member

    ...Sintáctico e léxico ;)
     
    Última edição: 29 de Dezembro de 2007

Partilhar esta Página