Jump to content
rfrancisco

[Resolvido] Importar dados de um ficheiro xml

Recommended Posts

rfrancisco

Olá a todos,

A estrutura que eu conheço (pouco) de xml é:

<codigo>2346</codigo>
<folha_mensal>Novembro de 2010</folha_mensal>
<cc>Escritório</cc>
<funcao>Função</funcao>
<nome_func>Nome</nome_func>
<cbo>413105</cbo>
<departamento>1018</departamento>
<filial>1</filial>
<admissao>01/09/2009</admissao>

No entanto um cliente precisa que importe os dados de um ficheiro xml com esta estrutura:

<Item Type="Text" Layer="0" Font="Arial" XPos="11.06" YPos="142.85" Height="7" Color="#080000" Weight="normal" Decoration="none" ControlID="nc" DBRecordNo="0">TEXTO</Item>
<Item Type="Text" Layer="0" Font="Tahoma" XPos="61.91" YPos="8.70" Height="11" Color="#080000" Weight="Bold" Decoration="none" ControlID="nc" DBRecordNo="0">TEXTO</Item>
<Item Type="Text" Layer="0" Font="Arial" XPos="28.52" YPos="16.11" Height="8" Color="#080000" Weight="Bold" Decoration="none" ControlID="nc" DBRecordNo="0">TEXTO</Item>
[...]

Isto prolonga-se por algumas centenas de linhas.

Inicialmente atribuí a cada posição de um array uma linha e depois exportava os dados excluindo o resto da linha que não interessava, no entanto depois tenho uma "zona" onde os dados não são apresentados de forma linear, existem também linhas sem dados que não interessam...

Quero por isso pedir ajuda para encontrar uma forma mais automatizada de recolher estes dados, se alguém puder ajudar, agradeço.

Cumpts,

Roberto Francisco


"bater código"

Share this post


Link to post
Share on other sites
rfrancisco

Tentei aplicar o loadXML(FICHEIRO) mas obtenho estes erros:

Notice: DOMDocument::loadXML() [domdocument.loadxml]: Attribute Height of element Item: already defined in Entity, line: 31 in D:\Dropbox\dev\SERVER\webserver\root\houseadm\import2.php on line 252
Warning: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag QXDocument line 47 in Entity, line: 243 in D:\Dropbox\dev\SERVER\webserver\root\houseadm\import2.php on line 252

Tens algum exemplo que possas partilhar?

Obrigado.


"bater código"

Share this post


Link to post
Share on other sites
HappyHippyHippo

isso cheira a XML mal formado:

Attribute Height of element Item: already defined in Entity, line: 31

procura na linha 31 por uma entrada do elemento Item com dois atributos diferentes com o mesmo nome Height


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rfrancisco

isso cheira a XML mal formado:

procura na linha 31 por uma entrada do elemento Item com dois atributos diferentes com o mesmo nome Height

Realmente o ficheiro tem duas linhas com o mesmo atributo.

<!ATTLIST Item Height CDATA "12">

<!ATTLIST Item Height CDATA "1">

E quanto ao outro erro? Fim prematuro?? :confused:


"bater código"

Share this post


Link to post
Share on other sites
HappyHippyHippo

E quanto ao outro erro? Fim prematuro?? :confused:

é normal o processamento de um XML terminar quando ocorre um qualquer erro


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rfrancisco

é normal o processamento de um XML terminar quando ocorre um qualquer erro

Quer dizer que ocorre um erro na leitura do ficheiro, certo?

Podes explicar-me a razão da diferença de estrutura entre os dois excertos que postei?

É que a 1ª estrutura é mais simples de exportar os dados, visto que as tags têm cada uma o seu nome enquanto que a 2ª é um pouco "tudo ao molho" não têm diferenciação.

Para além disso todos os artigos que tenho lido sobre o assunto usam a 1ª estrutura.

Edited by rfrancisco

"bater código"

Share this post


Link to post
Share on other sites
brunoais

Mostra o XML completo sff para te podermos ajudar.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
rfrancisco

Acabei por usar referências para encontrar os dados, como divs...

Usei por isso strpos e substr, conjugados a fim de encontrar os dados e depois filtrar o que pretendia guardar na bd.

No caso específico:

$xpos = strpos($convert[$i], 'XPos="'); //posição numérica de XPos
$ypos = strpos($convert[$i], 'YPos="'); //posição numérica de YPos
$xinit = substr($convert[$i], ($xpos+6)); //posição inicial de x
$yinit = substr($convert[$i], ($ypos+6)); //posição inicial de y
$xpos = strpos($xinit, '"'); //posição da última aspa
$ypos = strpos($yinit, '"'); //posição da última aspa
$xend = substr($xinit, 0, $xpos);//valor de XPos
$yend = substr($yinit, 0, $ypos);//valor de YPos

Obrigado,

Roberto Francisco


"bater código"

Share this post


Link to post
Share on other sites
Rui Carlos
Em 10/17/2013 às 20:28, rfrancisco disse:

Realmente o ficheiro tem duas linhas com o mesmo atributo.

<!ATTLIST Item Height CDATA "12">

<!ATTLIST Item Height CDATA "1">

E quanto ao outro erro? Fim prematuro?? :confused:

Não é por nada, mas isso parece mais um DTD que um XML...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.