Ir para conteúdo

POWERED BY:

Arquivado

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

leooizepi

[Resolvido] XML - PHP

Recommended Posts

tenho um arquivo XML que foi gerado pelo excel.. e preciso pegar cada 'Worksheet' e jogar nas tabelas mysql... como leio esse arquivo e importo? estrutura do xml, mais ou menos assim:

 

...

<Worksheet ss:Name="Serviços">

<Table ss:ExpandedColumnCount="256" ss:ExpandedRowCount="5438" x:FullColumns="1"

x:FullRows="1">

<Column ss:Width="53.25"/>

<Column ss:Width="57.75"/>

<Column ss:AutoFitWidth="0" ss:Width="290.25" ss:Span="247"/>

<Row>

<Cell ss:StyleID="s22"><Data ss:Type="String">Data</Data></Cell>

<Cell ss:StyleID="s22"><Data ss:Type="String">Nrc</Data></Cell>

<Cell ss:StyleID="s22"><Data ss:Type="String">Prod</Data></Cell>

</Row>

<Row>

<Cell ss:StyleID="s23"><Data ss:Type="DateTime">2008-11-01T00:00:00.000</Data></Cell>

<Cell ss:StyleID="s24"><Data ss:Type="Number">84391928</Data></Cell>

<Cell ss:StyleID="s24"><Data ss:Type="String">DET</Data></Cell>

</Row>

...

</Worksheet>

<Worksheet ss:Name="Negócios Internet e TV">

<Table ss:ExpandedColumnCount="256" ss:ExpandedRowCount="5654" x:FullColumns="1"

x:FullRows="1">

<Column ss:Width="84"/>

<Column ss:Width="102"/>

<Row>

<Cell ss:StyleID="s28"><Data ss:Type="String">CANAL_VENDAS</Data></Cell>

<Cell ss:StyleID="s28"><Data ss:Type="String">DT_CONCORDANCIA</Data></Cell>

</Row>

<Row>

<Cell ss:StyleID="s29"><Data ss:Type="String">VIRLA</Data></Cell>

<Cell ss:StyleID="s30"><Data ss:Type="DateTime">2008-11-26T00:00:00.000</Data></Cell>

</Row>

 

...

</Worksheet>

 

valeu... abraço!!! feliz ano novo!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pegar os dados é facil, mas você precisa ver um padrao, como ta os campos no banco de dados?

 

por exemplo no seu xml tem serviços com 3 campos Data, Nrc, Prod

e Negócios Internet e TV com 2 campos CANAL_VENDAS, DT_CONCORDANCIA e VIRLA

 

é uma tabela só, ou varias?

 

definindo certo os campos e tabelas, só pegar os dados e salvar.

 

posta mais detalhes assim fica mais facil ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao fabyo é o seguinte....

 

eu vou ter 3 <Worksheet>, cada 1 deles será uma tabela.

Está faltando varios campos que eu nao colokei,colokei só uma amostra do meu arquivo(é gigante).

 

Primeira coisa a fazer é pegar os registros do <Worksheet ss:Name="Serviços"> e ir inserindo no banco, quando acabar esse <Worksheet>, tenho q pegar o outro em seguinda e fazer o mesmo, até eu pegar todos <Worksheets>.

 

Se puder começar o script eu agradeço.. soh para ter noção como começar e como parar!!

 

valeu.. abraço!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode pegar o conteudo de varias maneiras, mas tem 2 jeito que é preciso ao pegar os dados

 

o primeiro é dom

 

$doc = new DOMDocument();

$doc->loadXML($xml);

 

o segundo metodo é usando xpath

 

mas procure tentar fazer com DOM

 

http://br2.php.net/manual/pt_BR/domdocument.loadxml.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza fabyo.. to dando uma olhada...

 

mais como q eu vou pegar os valores a partir do <Worksheet ss:Name="Serviços"> até o final desse mesmo Worksheet, porque tem muita coisa antes q eu nao preciso..

 

por enquanto ta assim:

 

<?php
$doc = new DOMDocument();
$doc->load('analitico.xml');
echo $doc->saveXML();
?>

apareceu o arquivo inteiro.. hehe

 

valeu.. abraço!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao aparece o arquivo todo porque foi isso que você pediu pra fazer

 

com o xml dentro do dom você trata ele e pega o que quiser

 

para saber os metodos que você precisa usar faz isso:

 

print_r(get_class_methods($doc));

 

ou leia o manual

Compartilhar este post


Link para o post
Compartilhar em outros sites

fabyo.. ta dando um erro...

 

no meu arquivo ta assim:

 

<?php
$doc = new DOMDocument();
$doc->load('analitico.xml');

//print_r(get_class_methods($doc));

$worksheet = $doc->getElementsByTagName("Worksheet");
for ($i=0;$i<$worksheet->length;$i++)
{
	echo $i.'<br><hr>';

}

?>

ele ta aparecendo a quanto de worksheet q eu tenho... resultado desse arquivo é 3. beleza ta certo

 

agora aumento o grau..

 

<?php
$doc = new DOMDocument();
$doc->load('analitico.xml');

//print_r(get_class_methods($doc));

$worksheet = $doc->getElementsByTagName("Worksheet");
for ($i=0;$i<$worksheet->length;$i++)
{
	echo $i.'<br><hr>';
	$row = $worksheet->getElementsByTagName("Row");
	for ($ii=0;$i<$row->length;$ii++)
	{
		echo $ii.'<br>';
	}
}

?>

esse arquivo é para listar o numero do worksheet e o numero de Row q tem dentro de cada worksheet certo?

 

mais ta dando esse erro:

 

Fatal error: Call to undefined method DOMNodeList::getElementsByTagName() in C:\site\teste_xml\index.php on line 11

 

e ae? o q sera?

 

abraço!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

só uma coisa pra eu testar aqui montei um xml +- só pra funcionar, a primeira coisa que você tem que ver é que o Dom só trabalha com xml valido, se nao percebeu isso é porque seu display_errors esta em off, consertando isso você pode dar continuidade

 

eu montei um exemplo e como falei, com meu xml funcionou normal

 

peguei tudo

 

$doc = new DOMDocument();
$doc->load('analitico.xml');

$worksheet = $doc->getElementsByTagName("Worksheet");

foreach($worksheet as $row){
$rr = $row->getElementsByTagName('Row');

echo $rr->item(0)->nodeValue."<br />";	
echo $rr->item(1)->nodeValue."<br />";	
}

 

item(0) = 1 <Row> ... </Row>

item(1) = 2 <Row> ... </Row>

 

e assim por diante

 

http://www.php.net/manual/pt_BR/domdocumen...tsbytagname.php

 

mas to gostando de ver, você ja entendeu a ideia e ta se virando, parabens

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu script funcionoui certinho.. mais apareceu só dois registros.

 

e agora pra pegar todos? de todos worksheets?

 

valeu! abraço!!

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.