Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ XML _ [xml/import]Import pliku xml

Napisany przez: maniek74 24.01.2015, 14:47:42

Witam
Otrzymałem taki xml

  1. <?xml version="1.0" encoding="ISO-8859-2"?>
  2. <plik>
  3. <header>
  4. <informacje>***********</informacje>
  5. <agencja>test</agencja>
  6. <data>2015-01-23 12:44:38</data>
  7. <wersja>0.4</wersja>
  8. <cel>oferty.net</cel>
  9. <zawartosc_pliku>calosc</zawartosc_pliku>
  10. </header>
  11. <lista_ofert>
  12. <dzial tab="mieszkania" typ="sprzedaz">
  13. <oferta>
  14. <id>MS-9</id>
  15. <param nazwa="wojewodztwo" typ="text">mazowieckie2</param>
  16. <param nazwa="miasto" typ="text">Warszawa</param>
  17. <param nazwa="dzielnica" typ="text">Żoliborz1</param>
  18. <location>
  19. <area level="2">mazowieckie</area>
  20. <area level="3">warszawski</area>
  21. <area level="4">Warszawa</area>
  22. <area level="5">Żoliborz</area>
  23. </location>
  24. <param nazwa="rynek" typ="text">wtorny</param>
  25. <param nazwa="powierzchnia" typ="real">55,00</param>
  26. <param nazwa="liczbapokoi" typ="int">2</param>
  27. <param nazwa="liczbatelefonow" typ="int">1</param>
  28. <param nazwa="pietro" typ="int">10</param>
  29. <param nazwa="liczbapieter" typ="int">10</param>
  30. <param nazwa="rokbudowy" typ="int">1978</param>
  31. <param nazwa="typkuchni" typ="text">aneks kuchenny - połączony z salonem</param>
  32. <param nazwa="ogrzewanie" typ="text">własne dla budynku</param>
  33. <cena waluta="PLN">442000,00</cena>
  34. <param nazwa="winda" typ="bool">1</param>
  35. <param nazwa="dataaktualizacji" typ="text">2011-10-11</param>
  36. <param nazwa="materialbudowy" typ="text">mieszana</param>
  37. <param nazwa="biuro" typ="bool">0</param>
  38. <param nazwa="zwalnianeod" typ="text">do uzgodnienia</param>
  39. <param nazwa="wysokoscpomieszczen " typ="float">250,00</param>
  40. <param nazwa="wylacznosc" typ="bool">1</param>
  41. <param nazwa="bezprowizji" typ="bool">0</param>
  42. <param nazwa="miejscaparkingowe" typ="text">miejsce parkingowe</param>
  43. <param nazwa="balkon" typ="bool">1</param>
  44. <param nazwa="piwnica" typ="bool">1</param>
  45. <param nazwa="internet" typ="bool">1</param>
  46. <param nazwa="wysokoscpomieszczen" typ="float">2,50</param>
  47. <param nazwa="stannieruchomosci" typ="text">Do odświeżenia</param>
  48. <param nazwa="osiedlezamkniete" typ="bool">0</param>
  49. <param nazwa="typbudynkumieszk" typ="text">blok</param>
  50. <param nazwa="forma_wlasnosci" typ="text">Spółdzielcze własnościowe</param>
  51. <param nazwa="cenazametr " typ="float">8036,363636363636363636363636</param>
  52. <param nazwa="powierzchnia_lazienki" typ="real">3</param>
  53. <param nazwa="ma_telefon " typ="bool">1</param>
  54. <param nazwa="lazienka_wc" typ="bool">0</param>
  55. <param nazwa="n_geo_x" typ="float">20.9580117</param>
  56. <param nazwa="n_geo_y" typ="float">52.2728038</param>
  57. <param nazwa="wsp_x" typ="real">52.2728038</param>
  58. <param nazwa="wsp_y" typ="real">20.9580117</param>
  59. <param nazwa="opis" typ="text">
  60. 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.
  61. </param>
  62. <param nazwa="agent_nazwisko" typ="text">Maciej Waloński</param>
  63. <param nazwa="agent_tel_kom" typ="text">501037675</param>
  64. <param nazwa="zdjecie1" typ="text">test_ms_MS-9_1.jpg</param>
  65. <param nazwa="zdjecie2" typ="text">test_ms_MS-9_2.jpg</param>
  66. <param nazwa="zdjecie3" typ="text">test_ms_MS-9_3.jpg</param>
  67. <param nazwa="zdjecie4" typ="text">test_ms_MS-9_4.jpg</param>
  68. </oferta>
  69.  


XML pobieram w ten sposób:
  1. <?php
  2. $xml = simplexml_load_file("oferty.xml");
  3. http://www.php.net/print '<table border="1">';
  4. foreach($xml->lista_ofert->dzial as $xml_dzial) {
  5. $dzial = $xml_dzial->attributes();
  6.  
  7. http://www.php.net/print '<tr>';
  8. http://www.php.net/print '<td colspan="6"><b>'.$dzial['tab'].' - '.$dzial['typ'].'</b></td>';
  9. http://www.php.net/print '</tr>';
  10.  
  11. http://www.php.net/print '<tr>';
  12. http://www.php.net/print '<td><b>ID</b></td>';
  13. http://www.php.net/print '<td><b>Cena</b></td>';
  14. http://www.php.net/print '<td><b>Wojewodztwo</b></td>';
  15. http://www.php.net/print '</tr>';
  16.  
  17. foreach($xml_dzial->oferta as $xml_data){
  18. $cenaAtr = $xml_data->cena->attributes();
  19. http://www.php.net/print '<tr>';
  20. http://www.php.net/print '<td>'.$xml_data->id.'</td>';
  21. http://www.php.net/print '<td>'.$xml_data->cena.' '.$cenaAtr['waluta'].'</td>';
  22.  
  23.  
  24. foreach($xml_data->param as $xml_param){
  25. $paramAtr = $xml_param->getAttribute('nazwa');
  26. http://www.php.net/print $paramAtr;
  27.  
  28. //$paramAtr = $xml_param->attributes();
  29. //print $xml_param->$paramAtr['nazwa'].'<br>';
  30. //$wojewodztwo = $xml_param->xpath('//param[@nazwa="wojewodztwo"]');
  31. //print $wojewodztwo[0];
  32. }
  33.  
  34. http://www.php.net/print '</tr>';
  35. }
  36. }
  37.  
  38. http://www.php.net/print '</table>';
  39.  


Czy może ktos mi pomóc jak pobrac wartości z <param

Pozdrawiam

Napisany przez: Pyton_000 25.01.2015, 00:24:03

print (string)$paramAtr;

Napisany przez: maniek74 25.01.2015, 00:43:43

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.

  1. // utworzenie uchwytu do pliku
  2. $plik = http://www.php.net/fopen('oferty.xml','r');
  3. $newFile = false;
  4.  
  5. // przypisanie zawartości do zmiennej
  6. while(!http://www.php.net/feof($plik)){
  7. $linia = http://www.php.net/fgets($plik);
  8.  
  9. // Województwo
  10. if(http://www.php.net/preg_match('/<param nazwa="wojewodztwo" typ="text">(.*?)<\/param>/si', $linia)) {
  11. http://www.php.net/preg_match('/<param nazwa="wojewodztwo" typ="text">(.*?)<\/param>/si', $linia, $wojewodztwo);
  12. $linia = ' <wojewodztwo>'.$wojewodztwo[1].'</wojewodztwo>'."\n";
  13. }
  14.  
  15. .........
  16.  
  17. $newFile .= $linia;
  18. }
  19.  
  20.  
  21. $saveFile = http://www.php.net/fopen("oferty2.xml","w");
  22. http://www.php.net/fwrite($saveFile, $newFile);
  23. http://www.php.net/fclose($saveFile);
  24. ?>
  25.  
  26. Co sądzicie o takim rozwiązaniu?

Napisany przez: Pyton_000 25.01.2015, 01:02:11

Ahh sorry:

Kod
print (string)$xml_param->attributes()->nazwa;

Napisany przez: maniek74 25.01.2015, 01:13:49

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:

  1. if(http://www.php.net/preg_match('/<param nazwa="opis" typ="text">/s(.*?)\s<\/param>/si', $linia)) { http://www.php.net/print 'opis';
  2. http://www.php.net/preg_match('/<param nazwa="opis" typ="text">(.*?)\s<\/param>/si', $linia, $opis);
  3. $linia = ' <opis>'.$opis[1].'</opis>'."\n";
  4. }


I nie działa

Pozdrawiam

Napisany przez: Pyton_000 25.01.2015, 01:40:01

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.

Napisany przez: maniek74 25.01.2015, 01:44:10

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)