Guest id194 Posted July 22, 2006 at 12:56 AM Report #39516 Posted July 22, 2006 at 12:56 AM Há muito tempo atras andei a procura de como ler e escrever em ficheiros XML atraves de PHP e encontrie umas funções, acabando o meu código final por ser o seguinte: Leitura do XML: function parseXML2Array($xmlfile, $type = 0) { $xml = xml_parser_create('ISO-8859-1'); xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); $xmldata = file_get_contents($xmlfile); xml_parse_into_struct($xml, $xmldata, $vals, $index); xml_parser_free($xml); foreach ($vals as $node) { if ($node['type'] == 'open' && $node['level'] != 1) { $arraynode = $node['tag']; } elseif ($node['type'] == 'complete' && $node['level'] != 1) { if ($node['tag'] == 'id') { $id = $node['value']; } else { switch ($type) { case 1 : $xml[$id][$node['tag']] = $node['value']; break; case 2 : $xml[$node['tag']] = $node['value']; break; default : $xml[$arraynode][$node['tag']] = $node['value']; break; } } } } return $xml; } Escrita do XML: function createXMLFile($rootnode, $settarray, $type = 0) { $xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"; $xml .= "<$rootnode>\n"; foreach ($settarray as $node => $nodevalue) { if ($type == 1) { $id = $node; $node = 'item'; } if ($type == 2) { $xml .= "\t<$node>$nodevalue</$node>\n"; } else { $xml .= "\t<$node>\n"; if ($type == 1) { $xml .= "\t\t<id>$id</id>\n"; } foreach ($nodevalue as $subnode => $value) { $xml.= "\t\t<$subnode>$value</$subnode>\n"; } $xml .= "\t</$node>\n"; } } $xml .= "</$rootnode>"; return $xml; } Exemplo de XML: <?xml version="1.0" encoding="ISO-8859-1"?> <settings> <nodo1> <username>admin</username> <password>827ccb0eea8a706c4c34a16891f84e7b</password> </system> <system> <documentroot>c:/WWW</documentroot> <cmsdocumentroot>c:/WWW/devs/nzCms2</cmsdocumentroot> <sitename>nzContent Management System v2.0 (ALPHA)</sitename> <siteurl>http://localhost/devs/nzCms2</siteurl> <messagetimer>2</messagetimer> </system> </settings> Para ler este XML bastava chamar a função do genero: $_SETTINGS = parseXML2Array('caminho/ficheiro.xml'); O que iria produzir um array do genero: Array ( [login] => Array ( [username] => admin [password] => 827ccb0eea8a706c4c34a16891f84e7b ) [system] => Array ( [documentroot] => c:/WWW [cmsdocumentroot] => c:/WWW/devs/nzCms2 [sitename] => nzContent Management System v2.0 (ALPHA) [siteurl] => http://localhost/devs/nzCms2 [messagetimer] => 2 ) ) Após isto, bastava editar o array como uma variavel normal e depois escrever com a função: $xmlcontent = createXMLFile('settings', $_SETTINGS); Seguidamente, era só gravar o conteudo de $xmlcontent para ficheiro. Como podem reparar em ambas as funções, existe o parametro $type que é para diferentes tipos de ficheiros XML. Apresento a seguir 2 exemplos de XML que representa o $type = 1 e $type = 2 respectivamente. O $type não definido está no exemplo acima. $type = 1 <?xml version="1.0" encoding="ISO-8859-1"?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD> <CD> <TITLE>Greatest Hits</TITLE> <ARTIST>Dolly Parton</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>RCA</COMPANY> <PRICE>9.90</PRICE> <YEAR>1982</YEAR> </CD> </CATALOG> $type = 2 <?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> Espero que isto seja útil...
kingless Posted July 22, 2006 at 01:17 AM Report #39525 Posted July 22, 2006 at 01:17 AM Muito Bom B)
Drone Posted July 22, 2006 at 02:51 AM Report #39532 Posted July 22, 2006 at 02:51 AM Mto nice! tnks nazgulled!! :smoke:
Guest id194 Posted July 22, 2006 at 02:59 AM Report #39534 Posted July 22, 2006 at 02:59 AM cenas deste tipo, mas mais detalhado e mais bem escrito/estruturado é que fica bem numa wiki do P@P... B)
kingless Posted July 22, 2006 at 10:05 AM Report #39547 Posted July 22, 2006 at 10:05 AM Mto nice! tnks nazgulled!! :smoke: Tipo... Isso só serve para ler o XML e não para colocar os dados d* input no XML
Guest id194 Posted July 22, 2006 at 01:01 PM Report #39573 Posted July 22, 2006 at 01:01 PM não percebi, tas a dizer que não dá para modificar o XML e dps gravar as modificações? é que se for isso tas enganado, volta a ler o post inicial e lê a função createXMLFile() se não for isso, então n percebi mesmo a que te referias.
kingless Posted July 22, 2006 at 02:20 PM Report #39594 Posted July 22, 2006 at 02:20 PM não percebi, tas a dizer que não dá para modificar o XML e dps gravar as modificações? é que se for isso tas enganado, volta a ler o post inicial e lê a função createXMLFile() se não for isso, então n percebi mesmo a que te referias. Yep estava a falar de modificar o XML... não tinha reparado na funçao createXMLFile(); B)
Drone Posted July 25, 2006 at 01:56 PM Report #40159 Posted July 25, 2006 at 01:56 PM Não sei porque mas nao consegui por a funcionar esse teu codigo, dava-me um erro.. btw ja consegui fazer na mesma o que pretendia em vez de alterar o XML criei um PHP que interpreta como XML, ou seja no flash to a em vez de xamar o xpto.xml estou a xamar o xpto.php que interpreta como XML e dentro desse PHP tou a buscar a informação da base de dados, fica aqui a dica 😛
Guest id194 Posted July 25, 2006 at 11:57 PM Report #40294 Posted July 25, 2006 at 11:57 PM mas não percebi... tas com algum prob ou tavas? e se tavas ja conseguiste resolver? deu a entender que tinhas postado algo e dps editaste mt rapidamente, ou não? ta ai uma confusão 👍
Drone Posted July 26, 2006 at 09:00 AM Report #40320 Posted July 26, 2006 at 09:00 AM Eu queria arranjar uma maneira de poder alterar o XML atraves do PHP, ou seja fazer edit do fixeiro .xml atraves de funções no PHP.. Tu deste esse codigo e eu exprimentei, mas dava-me um erro, foi entao que pensei uma nova maneira de solucionar o meu problema que é fazer um PHP que vai buscar informação à base de dados e interpretar o fixeiro como XML e consegui 👍 (mas nao estou a utilizar o teu codigo)
kingless Posted July 27, 2006 at 10:17 AM Report #40528 Posted July 27, 2006 at 10:17 AM Utilizando ou não o código do Nazgulled o que interessa é que esta resolvido 👍
Guest id194 Posted July 30, 2006 at 01:29 PM Report #41127 Posted July 30, 2006 at 01:29 PM Eu queria arranjar uma maneira de poder alterar o XML atraves do PHP, ou seja fazer edit do fixeiro .xml atraves de funções no PHP mas com as funções acima fazias isso facilmente, lias o xml para um array com a função parseXML2Array(), editavas o array como outro array qualquer em php e depois era so voltar a escrever o conteudo no xml usando o createXMLFile() mas se já resolveste o problema, óptimo.
djthyrax Posted November 29, 2006 at 11:46 AM Report #67543 Posted November 29, 2006 at 11:46 AM Isso foi testado em que versões do PHP? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Guest id194 Posted November 29, 2006 at 04:39 PM Report #67606 Posted November 29, 2006 at 04:39 PM De momento uso o 5.1.4, mas já usei outras versões do 5 e funcionava, não me lembro se já tinha testado este código nas versões do 4, mas penso que funcionará... Mas também não custa nada tentar...
djthyrax Posted November 29, 2006 at 04:42 PM Report #67608 Posted November 29, 2006 at 04:42 PM De momento uso o 5.1.4, mas já usei outras versões do 5 e funcionava, não me lembro se já tinha testado este código nas versões do 4, mas penso que funcionará... Mas também não custa nada tentar... pois, eu tava era na aula de TIC e n podia experimentar o cód 😉 qq puder/precisar testo 🙂 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
pedrotuga Posted November 29, 2006 at 05:31 PM Report #67628 Posted November 29, 2006 at 05:31 PM mmm.... Não percebi muito bem... A ideia do xml é usar um parser, passar o xml par a estrutura de dados correspondente, fazer o que há afazer tal qual estamos habituados em qq outra situação e, no fim exportar tudo de novo para xml. anyway.... estão aí error. XML não pode ter letras maíuculas nas tags
Bruno Posted November 29, 2006 at 06:02 PM Report #67641 Posted November 29, 2006 at 06:02 PM Também n percebi bem ? O que isso faz além disto: http://pt.php.net/manual/en/ref.simplexml.php
Guest id194 Posted November 29, 2006 at 09:15 PM Report #67731 Posted November 29, 2006 at 09:15 PM sinceramente, não estou a perceber qual é a dúvida agora, vocês estão a falar de que? a responder a quem?
djthyrax Posted November 29, 2006 at 09:42 PM Report #67746 Posted November 29, 2006 at 09:42 PM sinceramente, não estou a perceber qual é a dúvida agora, vocês estão a falar de que? a responder a quem? Ao teu primeiro post se não me engano. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Bruno Posted November 30, 2006 at 01:07 AM Report #67880 Posted November 30, 2006 at 01:07 AM Exacto, eu pelo menos pelo que percebi apresentaste "altas" funções para ler e escrever num XML quando o PHP tem isso tudo feito e basta invocar numa linha 🙂
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now