Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP]Problem z tworzeniem ścieżki
Forum PHP.pl > Forum > Przedszkole
ilidir
witam wszystkich serdecznie mam problem z tworzeniem ścieżki do danych w pliku XML.

Oto mój plik:
  1. <?xml version="1.0" encoding="windows-1250" ?>
  2. <channel>
  3. <lista>
  4. <miasto>poznan
  5. <kod>60-682</kod>
  6. <kod>61-682</kod>
  7. <kod>62-060</kod>
  8. </miasto>
  9. <miasto>eodtest
  10. <kod>00-111</kod>
  11. <kod>00-222</kod>
  12. <kod>00-333</kod>
  13. </miasto>
  14. </lista>
  15. </channel>


Chciałbym aby teraz automatycznie wczytał mi miasto i przypisane do niego kody:

W php mam tak
  1. //zmienne
  2. $tabela_dane=array();
  3. $tabela_kod=array();
  4.  
  5.  
  6. $xml = simplexml_load_file('../dane.xml');
  7. foreach($xml->lista->miasto as $miasto){
  8. $tabela_dane[]=$miasto;
  9. }
  10. foreach($tabela_dane as $m){
  11. echo "$m<br>";
  12. foreach($xml->lista->$m->kod as $kod){
  13. $tabela_kod[]=$kod;
  14. }
  15. }
  16. foreach($tabela_kod as $k){
  17. echo "$k<br>";
  18. }


nie działa mi zmienna $m


będę wdzieczny za jakiś trop smile.gif
nospor
Po pierwsze:
$tabela_dane[]=(string)$miasto;
Nastepnym razem printuj sobie tablice ktore tworzysz to bedziesz sam widzial jakie bzdury tam są.

Po drugie:
foreach($xml->lista->$m->kod as $kod){
Co ty niby chciales tym kodem osiagnac? Przeciez nie masz w swoim XMLu znacznikow o nazwie miasta.
ilidir
no faktycznie zgadzam się to w jaki sposób można się odwołać do zawartości znaczników questionmark.gif?


pozdrawiam
nospor
Normalnie, pętlą po KOD, tak jak pętlą leciałeś po MIASTO
ilidir
no nie za bardzo chce mi to działać:

kod php

  1. $xml = simplexml_load_file('/home/hdpl/public_html/EOD/testy/dane.xml');
  2. foreach($xml->lista->miasto as $miasto){
  3. $tabela_dane[]=(string)$miasto;
  4. }
  5. foreach($xml->lista->miasto->kod as $kod){
  6. $tabela_kod[]=(string)$kod;
  7. }
  8. foreach($tabela_dane as $m){
  9. echo "$m<br>";
  10. foreach($tabela_kod as $k){
  11. echo "$k<br>";
  12. }
  13. }


wypisuje mi coś takiego:

poznan
60-682
61-682
62-060
eodtest
60-682
61-682
62-060

a jak użyje funkcji w taki sposób:
  1. reach($xml->lista->miasto as $miasto){
  2. $tabela_dane[]=(string)$miasto;
  3. foreach($xml->lista->miasto->kod as $kod){
  4. $tabela_kod[]=(string)$kod;
  5. }
  6. }
  7. foreach($tabela_dane as $m){
  8. echo "$m<br>";
  9. foreach($tabela_kod as $k){
  10. echo "$k<br>";
  11. }
  12. }


to wypisuje mi takie coś:

poznan
60-682
61-682
62-060
60-682
61-682
62-060
eodtest
60-682
61-682
62-060
60-682
61-682
62-060


a mi chodzi żeby wypisywał tylko te kody ktore sa do miast przypisane
nospor
W tym miejscu:
  1. foreach($xml->lista->miasto as $miasto){
  2.  
  3. $tabela_dane[]=(string)$miasto;
  4.  
  5. }

jestes w znczniku miast. Przeleciec teraz po kodach tego miasta i bedziesz mial kody dla tego miasta. Tylko nie tworz znowu pelnej sciezki $xml->lista->miasto->kod, tylko masz jechac juz od $miasto w ktorym aktualnie jestes.

Zresztą masz:
  1. $tabela_dane=array();
  2. $xml = simplexml_load_file('dane.xml');
  3. foreach($xml->lista->miasto as $miasto){
  4. $row = array('miasto' => trim((string)$miasto), 'kody' => array());
  5. foreach ($miasto->kod as $kod) // tu lecisz po kodach aktualnego znacznika miasto
  6. $row['kody'][] = (string)$kod;
  7. $tabela_dane[]=$row;
  8.  
  9. }
  10.  
  11. print_r($tabela_dane);

Przeanalizuj dokladnie ten kod. To naprawde proste.
ilidir
no faktycznie - niespodziewałem siętak szybkiej odpowiedzi smile.gif ale .... jak zawsze jest ale smile.gif

to rozwiązanie daje połowiczny efekt

poznan
60-682
61-682
62-060
00-111
00-222
00-333
eodtest
60-682
61-682
62-060
00-111
00-222
00-333

teraz mam wszystkie kody ale nie przypisane do miasta ;/
nospor
Kurce... odpaliles w ogole moj kod? Przeciez tam masz przypisanie do miast.
ilidir
dzieki nie zauważyłem że dałeś mi gotowe rozwiazanie - przepraszam.

mam jeszcze jeden problem a mianowicie:

używając twojego kodu wyświetla mi się coś takiego:

testy
Komisja Finansów
EOD 1
EOD 2
EOD 3
KOMISJA KULTURY
EOD 1
EOD 3
EOD 5

i to jest super bo o to mi chodziło plik xml wygląda tak:

  1. <?xml version="1.0" encoding="windows-1250" ?>
  2. <channel>
  3. <zestawienie>
  4. <zmiana>TAK</zmiana>
  5. <miasto>testy
  6. <komisja>Komisja Finansów
  7. <uzytkownik>EOD 1</uzytkownik>
  8. <uzytkownik>EOD 2</uzytkownik>
  9. <uzytkownik>EOD 3</uzytkownik>
  10. </komisja>
  11. <komisja>KOMISJA KULTURY
  12. <uzytkownik>EOD 1</uzytkownik>
  13. <uzytkownik>EOD 3</uzytkownik>
  14. <uzytkownik>EOD 5</uzytkownik>
  15. </komisja>
  16. </miasto>
  17. </zestawienie>
  18. </channel>


chciałbym teraz przechwycić samą nazwe komisji "Komisja Finansów" Jeżeli przypiszę ją z tej pętli foreach ($miasto_uzytkownicy->komisja as $komisja) czyli na przykład $zmienna = $komisja i sobie ją wyświetle to jest ok ale w momęcie w którym chce tą zmienną zastosować w zapytaniu SQL

  1. $zapytanie_id_grupy = "SELECT id FROM ofria_usergroups WHERE title = '$zmienna'"


to SQL nie zwraca mi żadnej wartości - wiem że ta wartość tam jest na 100%

Inaczej się sprawa ma jeżeli plik xml zmuduje tak:
  1. <?xml version="1.0" encoding="windows-1250" ?>
  2. <channel>
  3. <zestawienie>
  4. <zmiana>TAK</zmiana>
  5. <miasto>testy
  6. <komisja>Komisja Finansów </komisja>
  7. <uzytkownik>EOD 1</uzytkownik>
  8. <uzytkownik>EOD 2</uzytkownik>
  9. <uzytkownik>EOD 3</uzytkownik>
  10.  
  11. <komisja>KOMISJA KULTURY </komisja>
  12. <uzytkownik>EOD 1</uzytkownik>
  13. <uzytkownik>EOD 3</uzytkownik>
  14. <uzytkownik>EOD 5</uzytkownik>
  15.  
  16. </miasto>
  17. </zestawienie>
  18. </channel>


to wówczas nie mam problemu z zapytanie XML ale takie rozwiązanie nie spełnia moich oczekiwań więc proszę o pomoc.
nospor
No dobra, ale pokaz kod z ktorym masz problem, bo naprawde nie wiem czego nie mozesz zrobic.
ilidir
Mozna zawsze przerobić plik xml ale nie o to chgodzi:

poniżej zamieszczam kod z jakim mam kłopot.

  1. foreach ($miasto_uzytkownicy->komisja as $komisja){
  2. $zapytanie_id_grupy = "SELECT id FROM ofria_usergroups WHERE title = '$komisja'"
  3. or die('blad zapytania o id komisji');
  4. $sql_komisja = mysql_query($zapytanie_id_grupy);
  5. while($a = mysql_fetch_assoc($sql_komisja)) {
  6. $id_komisji = $a['id'];
  7. echo "$id_komisji<br>";



pozdrawiam
nospor
No dobra, a czemu nie sprawdzasz co wkladasz do bazy??
Czemu nie patrzysz na kodu co ci juz wczesniej podawalem??

Myslisz, że o to:
trim((string)$miasto)
to ja dla zabawy robilem? Nie, ja to robilem po to, by uzyskac tekst o jaki ci chodzi a nie obiekt DOM i kupe spacji....
ilidir
ahaaa ok czyli trim wywala mi z poczatku i końca cigu spacje jak rozumiem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.