leooizepi 1 Denunciar post Postado Janeiro 6, 2009 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
Otata 4 Denunciar post Postado Janeiro 6, 2009 cara da uma olhada http://www.php.net/manual/pt_BR/ref.domxml.php t+ Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 6, 2009 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
leooizepi 1 Denunciar post Postado Janeiro 6, 2009 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
Fabyo 66 Denunciar post Postado Janeiro 6, 2009 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
leooizepi 1 Denunciar post Postado Janeiro 6, 2009 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
Fabyo 66 Denunciar post Postado Janeiro 6, 2009 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
leooizepi 1 Denunciar post Postado Janeiro 6, 2009 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
Fabyo 66 Denunciar post Postado Janeiro 7, 2009 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
leooizepi 1 Denunciar post Postado Janeiro 7, 2009 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
leooizepi 1 Denunciar post Postado Janeiro 8, 2009 beleza.. consegui resoover meu problema com esse link http://www.ibm.com/developerworks/opensour...xcel/index.html valeu galera pela ajuda!! ate a proxima!! Compartilhar este post Link para o post Compartilhar em outros sites