Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [xml/import]Import pliku xml
maniek74
post 24.01.2015, 14:47:42
Post #1





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 26.08.2013

Ostrzeżenie: (0%)
-----


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. print '<table border="1">';
  4. foreach($xml->lista_ofert->dzial as $xml_dzial) {
  5. $dzial = $xml_dzial->attributes();
  6.  
  7. print '<tr>';
  8. print '<td colspan="6"><b>'.$dzial['tab'].' - '.$dzial['typ'].'</b></td>';
  9. print '</tr>';
  10.  
  11. print '<tr>';
  12. print '<td><b>ID</b></td>';
  13. print '<td><b>Cena</b></td>';
  14. print '<td><b>Wojewodztwo</b></td>';
  15. print '</tr>';
  16.  
  17. foreach($xml_dzial->oferta as $xml_data){
  18. $cenaAtr = $xml_data->cena->attributes();
  19. print '<tr>';
  20. print '<td>'.$xml_data->id.'</td>';
  21. 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. 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. print '</tr>';
  35. }
  36. }
  37.  
  38. print '</table>';
  39.  


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

Pozdrawiam

Ten post edytował maniek74 24.01.2015, 21:26:44
Go to the top of the page
+Quote Post
Pyton_000
post 25.01.2015, 00:24:03
Post #2





Grupa: Zarejestrowani
Postów: 7 821
Pomógł: 1375
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


print (string)$paramAtr;
Go to the top of the page
+Quote Post
maniek74
post 25.01.2015, 00:43:43
Post #3





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 26.08.2013

Ostrzeżenie: (0%)
-----


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 = fopen('oferty.xml','r');
  3. $newFile = false;
  4.  
  5. // przypisanie zawartości do zmiennej
  6. while(!feof($plik)){
  7. $linia = fgets($plik);
  8.  
  9. // Województwo
  10. if(preg_match('/<param nazwa="wojewodztwo" typ="text">(.*?)<\/param>/si', $linia)) {
  11. 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 = fopen("oferty2.xml","w");
  22. fwrite($saveFile, $newFile);
  23. fclose($saveFile);
  24. ?>
  25.  
  26. Co sądzicie o takim rozwiązaniu?
Go to the top of the page
+Quote Post
Pyton_000
post 25.01.2015, 01:02:11
Post #4





Grupa: Zarejestrowani
Postów: 7 821
Pomógł: 1375
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Ahh sorry:

Kod
print (string)$xml_param->attributes()->nazwa;
Go to the top of the page
+Quote Post
maniek74
post 25.01.2015, 01:13:49
Post #5





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 26.08.2013

Ostrzeżenie: (0%)
-----


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(preg_match('/<param nazwa="opis" typ="text">/s(.*?)\s<\/param>/si', $linia)) { print 'opis';
  2. 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
Go to the top of the page
+Quote Post
Pyton_000
post 25.01.2015, 01:40:01
Post #6





Grupa: Zarejestrowani
Postów: 7 821
Pomógł: 1375
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
maniek74
post 25.01.2015, 01:44:10
Post #7





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 26.08.2013

Ostrzeżenie: (0%)
-----


Po wiem tak, jesteś wielki cały dzień siedzę kombineje i nic.

Dzięki serdeczne.
Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.12.2019 - 13:24