Witam
Otrzymałem taki xml
<?xml version="1.0" encoding="ISO-8859-2"?> <plik> <header> <informacje>***********</informacje> <agencja>test</agencja> <data>2015-01-23 12:44:38</data> <wersja>0.4</wersja> <cel>oferty.net</cel> <zawartosc_pliku>calosc</zawartosc_pliku> </header> <lista_ofert> <dzial tab="mieszkania" typ="sprzedaz"> <oferta> <id>MS-9</id> <param nazwa="wojewodztwo" typ="text">mazowieckie2</param> <param nazwa="miasto" typ="text">Warszawa</param> <param nazwa="dzielnica" typ="text">Żoliborz1</param> <location> <area level="2">mazowieckie</area> <area level="3">warszawski</area> <area level="4">Warszawa</area> <area level="5">Żoliborz</area> </location> <param nazwa="rynek" typ="text">wtorny</param> <param nazwa="powierzchnia" typ="real">55,00</param> <param nazwa="liczbapokoi" typ="int">2</param> <param nazwa="liczbatelefonow" typ="int">1</param> <param nazwa="pietro" typ="int">10</param> <param nazwa="liczbapieter" typ="int">10</param> <param nazwa="rokbudowy" typ="int">1978</param> <param nazwa="typkuchni" typ="text">aneks kuchenny - połączony z salonem</param> <param nazwa="ogrzewanie" typ="text">własne dla budynku</param> <cena waluta="PLN">442000,00</cena> <param nazwa="winda" typ="bool">1</param> <param nazwa="dataaktualizacji" typ="text">2011-10-11</param> <param nazwa="materialbudowy" typ="text">mieszana</param> <param nazwa="biuro" typ="bool">0</param> <param nazwa="zwalnianeod" typ="text">do uzgodnienia</param> <param nazwa="wysokoscpomieszczen " typ="float">250,00</param> <param nazwa="wylacznosc" typ="bool">1</param> <param nazwa="bezprowizji" typ="bool">0</param> <param nazwa="miejscaparkingowe" typ="text">miejsce parkingowe</param> <param nazwa="balkon" typ="bool">1</param> <param nazwa="piwnica" typ="bool">1</param> <param nazwa="internet" typ="bool">1</param> <param nazwa="wysokoscpomieszczen" typ="float">2,50</param> <param nazwa="stannieruchomosci" typ="text">Do odświeżenia</param> <param nazwa="osiedlezamkniete" typ="bool">0</param> <param nazwa="typbudynkumieszk" typ="text">blok</param> <param nazwa="forma_wlasnosci" typ="text">Spółdzielcze własnościowe</param> <param nazwa="cenazametr " typ="float">8036,363636363636363636363636</param> <param nazwa="powierzchnia_lazienki" typ="real">3</param> <param nazwa="ma_telefon " typ="bool">1</param> <param nazwa="lazienka_wc" typ="bool">0</param> <param nazwa="n_geo_x" typ="float">20.9580117</param> <param nazwa="n_geo_y" typ="float">52.2728038</param> <param nazwa="wsp_x" typ="real">52.2728038</param> <param nazwa="wsp_y" typ="real">20.9580117</param> <param nazwa="opis" typ="text"> Przytulne trzy pokojowe mieszkanie z widną kuchnią częściowo otwartą na salon. W przedpokoju szafy wnękowe typu komandor, łazienka i WC osobno. Mieszkania posiada duży balkon typu loggia. Słoneczne i rozkładowe. Budynek z 1978 roku, technologia budowy mieszana, odnowiona elewacja, miejsce postojowe przed blokiem. </param> <param nazwa="agent_nazwisko" typ="text">Maciej Waloński</param> <param nazwa="agent_tel_kom" typ="text">501037675</param> <param nazwa="zdjecie1" typ="text">test_ms_MS-9_1.jpg</param> <param nazwa="zdjecie2" typ="text">test_ms_MS-9_2.jpg</param> <param nazwa="zdjecie3" typ="text">test_ms_MS-9_3.jpg</param> <param nazwa="zdjecie4" typ="text">test_ms_MS-9_4.jpg</param> </oferta>
<?php $xml = simplexml_load_file("oferty.xml"); http://www.php.net/print '<table border="1">'; foreach($xml->lista_ofert->dzial as $xml_dzial) { $dzial = $xml_dzial->attributes(); http://www.php.net/print '<tr>'; http://www.php.net/print '<td colspan="6"><b>'.$dzial['tab'].' - '.$dzial['typ'].'</b></td>'; http://www.php.net/print '</tr>'; http://www.php.net/print '<tr>'; http://www.php.net/print '<td><b>ID</b></td>'; http://www.php.net/print '<td><b>Cena</b></td>'; http://www.php.net/print '<td><b>Wojewodztwo</b></td>'; http://www.php.net/print '</tr>'; foreach($xml_dzial->oferta as $xml_data){ $cenaAtr = $xml_data->cena->attributes(); http://www.php.net/print '<tr>'; http://www.php.net/print '<td>'.$xml_data->id.'</td>'; http://www.php.net/print '<td>'.$xml_data->cena.' '.$cenaAtr['waluta'].'</td>'; foreach($xml_data->param as $xml_param){ $paramAtr = $xml_param->getAttribute('nazwa'); http://www.php.net/print $paramAtr; //$paramAtr = $xml_param->attributes(); //print $xml_param->$paramAtr['nazwa'].'<br>'; //$wojewodztwo = $xml_param->xpath('//param[@nazwa="wojewodztwo"]'); //print $wojewodztwo[0]; } http://www.php.net/print '</tr>'; } } http://www.php.net/print '</table>';
print (string)$paramAtr;
Sorki ale $paramAtr = $xml_param->getAttribute('nazwa'); nie wyciągnie mi zmiennej z param, wpadłem na pomysł żeby napisać konwenter tego xml i zamienić tagi na normalne, i wtedy nie będzie problemu. To ma być import danych do bazy wię mozna zrobić na 2 etapy.
// utworzenie uchwytu do pliku $plik = http://www.php.net/fopen('oferty.xml','r'); $newFile = false; // przypisanie zawartości do zmiennej while(!http://www.php.net/feof($plik)){ $linia = http://www.php.net/fgets($plik); // Województwo if(http://www.php.net/preg_match('/<param nazwa="wojewodztwo" typ="text">(.*?)<\/param>/si', $linia)) { http://www.php.net/preg_match('/<param nazwa="wojewodztwo" typ="text">(.*?)<\/param>/si', $linia, $wojewodztwo); $linia = ' <wojewodztwo>'.$wojewodztwo[1].'</wojewodztwo>'."\n"; } ......... $newFile .= $linia; } $saveFile = http://www.php.net/fopen("oferty2.xml","w"); http://www.php.net/fwrite($saveFile, $newFile); http://www.php.net/fclose($saveFile); ?> Co sądzicie o takim rozwiązaniu?
Ahh sorry:
Nic nie szkodzi, ale to mi pokazuje warość z nazwy param np.
<param nazwa="wojewodztwo" typ="text">mazowieckie2</param> pokazuje wojewodztwo a nie mazowieckie2
przy okazji się zapytam nie wiesz może jak napisać regularne do czegoś takiego:
<param nazwa="opis" typ="text">
Przytulne trzy pokojowe mieszkanie z widną kuchnią częściowo otwartą na salon. W przedpokoju szafy wnękowe typu komandor, łazienka i WC osobno. Mieszkania posiada duży balkon typu loggia. Słoneczne i rozkładowe. Budynek z 1978 roku, technologia budowy mieszana, odnowiona elewacja, miejsce postojowe przed blokiem.
</param>
napisałem:
if(http://www.php.net/preg_match('/<param nazwa="opis" typ="text">/s(.*?)\s<\/param>/si', $linia)) { http://www.php.net/print 'opis'; http://www.php.net/preg_match('/<param nazwa="opis" typ="text">(.*?)\s<\/param>/si', $linia, $opis); $linia = ' <opis>'.$opis[1].'</opis>'."\n"; }
to wystarczyło dać print (string)$xml_param;
I zostaw te regexpy bo więcej kłopotu z tym będziesz miał jak pożytku.
Po wiem tak, jesteś wielki cały dzień siedzę kombineje i nic.
Dzięki serdeczne.
Pozdrawiam
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)