Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [XML][PHP] Jak wziąć wszystkie pozycje z XML'a?
Frugo75
post
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Witam ponownie.
Nie wiem jak zrobić jedną (wydaje się prostą) rzecz. Mianowicie utknąłem w xmlu.

Mam plik feeds który wygląda tak:
  1. <feeds>
  2. <feed id="158477" cat_id="1" add_date="2014-05-21 13:44:05" mod_date="0000-00-00 00:00:00" path="/1/2014-05-21/158477/158477.xml"/>
  3. <feed id="158476" cat_id="36" add_date="2014-05-21 13:32:19" mod_date="0000-00-00 00:00:00" path="/36/2014-05-21/158476/158476.xml"/>
  4. <feed id="158476" cat_id="21" add_date="2014-05-21 13:32:19" mod_date="0000-00-00 00:00:00" path="/21/2014-05-21/158476/158476.xml"/>
  5. <feed id="158473" cat_id="1" add_date="2014-05-21 13:06:26" mod_date="0000-00-00 00:00:00" path="/1/2014-05-21/158473/158473.xml"/>
  6. <feed id="158471" cat_id="83" add_date="2014-05-21 13:22:44" mod_date="2014-05-21 12:56:16" path="/83/2014-05-21/158471/158471.xml"/>
  7. <feed id="158471" cat_id="21" add_date="2014-05-21 13:22:44" mod_date="2014-05-21 12:56:16" path="/21/2014-05-21/158471/158471.xml"/>
  8.  
  9. </feeds>


I tutaj skryptem chcę wyciągać wszytkie "feed", parsować i dodawać do bazy:

  1. $doc = new DOMDocument("1.0", "iso-8859-2");
  2. $doc->load("feeds.xml");
  3.  
  4. $books = $doc->getElementsByTagName('feed');
  5. foreach ($books as $feed) {
  6. echo $feed->nodeValue, PHP_EOL;
  7.  
  8. $path = $feed -> getAttribute('path');
  9. $cat_id = $feed -> getAttribute('cat_id');
  10.  
  11. $path1 = substr($path, "1");
  12.  
  13.  
  14. $doc = new DOMDocument("1.0", "iso-8859-2");
  15.  
  16. $doc->load("$path1");
  17.  
  18. $feed = $doc->getElementsByTagName( "feed" );
  19. foreach ($feed as $matches)
  20. {
  21. $title = $matches->getElementsByTagName( "title" );
  22. $tytul = $title->item(0)->nodeValue;
  23.  
  24. $content = $matches->getElementsByTagName( "content" );
  25. $tresc = $content->item(0)->nodeValue;
  26.  
  27. $id = $matches->getElementsByTagName( "id" );
  28. $export_id = $id->item(0)->nodeValue;
  29.  
  30. $add_date = $matches->getElementsByTagName( "add_date" );
  31. $date = $add_date->item(0)->nodeValue;
  32.  


I teraz nie umiem wziąć wszystkich "feed", biore tylko jedno.
Czy pomoże mi ktoś wziąć wszystkie?
Go to the top of the page
+Quote Post
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Bierzesz jedno bo tablicę musisz powiększać
nie $title = $matches->getElementsByTagName( "title" );
a $title[] = $matches->getElementsByTagName( "title" );
Go to the top of the page
+Quote Post
Frugo75
post
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(Turson @ 21.05.2014, 14:27:32 ) *
Bierzesz jedno bo tablicę musisz powiększać
nie $title = $matches->getElementsByTagName( "title" );
a $title[] = $matches->getElementsByTagName( "title" );


Niestety nie działa, albo nie rozumiem.
Go to the top of the page
+Quote Post
Turson
post
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Ja bym to zrobił z użyciem SimpleXML bo jak sama nazwa wskazuje jest prosty
  1. $plik = new SimpleXMLElement('feeds.xml');
  2. foreach($plik->feeds->feed as $v){
  3. $id = (string)$v['id'];
  4. wrzucDoBazy(dane);
  5. }
Go to the top of the page
+Quote Post
Frugo75
post
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(Turson @ 21.05.2014, 15:04:12 ) *
Ja bym to zrobił z użyciem SimpleXML bo jak sama nazwa wskazuje jest prosty
  1. $plik = new SimpleXMLElement('feeds.xml');
  2. foreach($plik->feeds->feed as $v){
  3. $id = (string)$v['id'];
  4. wrzucDoBazy(dane);
  5. }


To mi pomogło, ale dalej nie bierze mi wszystkich.
  1. $plik = simplexml_load_file('feeds.xml');
  2. foreach ($plik->feed as $foo)
  3. {
  4.  
  5. $idd = (string)$foo['path'];
  6. $cat_id = (string)$foo['cat_id'];
  7.  
  8. echo $id = substr($idd, 1);
  9. }


i teraz jak wyświetlę $idd, to pięknie wyrzuca mi wszystkie ścieżki do plików xml.

Ale tu zaczyna się problem, bo chce te ścieżki do plików xml wrzucać tutaj:
  1. $doc = new DOMDocument("1.0", "iso-8859-2");
  2.  
  3. $doc->load($id);
  4.  
  5. $feed = $doc->getElementsByTagName( "feed" );
  6. foreach ($feed as $matches)
  7. {
  8.  
  9.  
  10. $title = $matches->getElementsByTagName( "title" );
  11. $tytul = $title->item(0)->nodeValue;
  12.  
  13. $content = $matches->getElementsByTagName( "content" );
  14. $tresc = $content->item(0)->nodeValue;
  15.  
  16. $id = $matches->getElementsByTagName( "id" );
  17. $export_id = $id->item(0)->nodeValue;
  18.  
  19. $add_date = $matches->getElementsByTagName( "add_date" );
  20. $date = $add_date->item(0)->nodeValue;
  21. }


I nie chce wziąć wszystkich "load($id)", bierze tylko jedną. Proszę o poradę, wskazówkę, jak to przeskoczyć.
Go to the top of the page
+Quote Post
owca_82
post
Post #6





Grupa: Zarejestrowani
Postów: 77
Pomógł: 8
Dołączył: 22.04.2012

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


Pobiera jedną wartość bo $idd nie jest tablicą wink.gif

Zamień na:

  1.  
  2. $idd[] = (string)$foo['path'];
  3.  


i powinno być ok smile.gif
Go to the top of the page
+Quote Post
Frugo75
post
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(owca_82 @ 22.05.2014, 18:00:20 ) *
Pobiera jedną wartość bo $idd nie jest tablicą wink.gif

Zamień na:

  1.  
  2. $idd[] = (string)$foo['path'];
  3.  


i powinno być ok smile.gif


Dziękuje, ale nie działa, albo ja czegoś nie rozumiem. Moze pomoże ktoś?

Cytat(Frugo75 @ 22.05.2014, 23:16:24 ) *
Dziękuje, ale nie działa, albo ja czegoś nie rozumiem. Moze pomoże ktoś?

Czy mogę prosić o wyjaśnienie lub wskazanie kierunku?
Go to the top of the page
+Quote Post
ibalyx
post
Post #8





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

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


tak jak koledzy piszą $idd[] jest tablicą. wiesz co to jest tablica?
w tablicy elementy masz zapisane tak:
$idd[0]
$idd[1]
$idd[2]
itd.

jaśniejsze? :-)
Go to the top of the page
+Quote Post
Frugo75
post
Post #9





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(ibalyx @ 23.05.2014, 14:45:10 ) *
tak jak koledzy piszą $idd[] jest tablicą. wiesz co to jest tablica?
w tablicy elementy masz zapisane tak:
$idd[0]
$idd[1]
$idd[2]
itd.

jaśniejsze? :-)


Niestety nie, totalna czarna dziura. Rozumiem co do mnie piszesz, ale nie wiem jak z tego wybrnąć. Jak to zastosować?
Prosze o troche cierpliwości i pomocy.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Bujasz sie z tym banalnym problemem od paru dni... Weź wkoncu zapoznaj się z czymś takim jak TABLICE. Bez tego ani rusz.
http://pl1.php.net/manual/en/language.types.array.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Frugo75
post
Post #11





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat
Cytat(nospor @ 26.05.2014, 12:09:57 ) *

Bujasz sie z tym banalnym problemem od paru dni... Weź wkoncu zapoznaj się z czymś takim jak TABLICE. Bez tego ani rusz.
http://pl1.php.net/manual/en/language.types.array.php


Poczytam, obiecuje. Skoro jest taki banalny to proszę Cię o pomoc, jak to zastosować.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Albo mozesz zrobic jak ci pisano na samym poczatku:
  1. $plik = new SimpleXMLElement('feeds.xml');
  2.  
  3. foreach($plik->feeds->feed as $v){
  4.  
  5. $id = (string)$v['id'];
  6.  
  7. wrzucDoBazy(dane); // I TUTAJ MASZ OD RAZU WRZUCAC DO BAZY A NIE TY WRZUCANIE ROBISZ GDZIESZ INDZIEJ GDZIE TRACISZ AKTUALNY OBROT PETLI
  8.  
  9. }


Cytat
Poczytam, obiecuje. Skoro jest taki banalny to proszę Cię o pomoc, jak to zastosować.
To poczytaj. Potem zapytaj ponownie, bo jak zrobic, to juz dostales nie raz tu odpowiedź.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Frugo75
post
Post #13





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(nospor @ 26.05.2014, 12:15:11 ) *
Albo mozesz zrobic jak ci pisano na samym poczatku:
  1. $plik = new SimpleXMLElement('feeds.xml');
  2.  
  3. foreach($plik->feeds->feed as $v){
  4.  
  5. $id = (string)$v['id'];
  6.  
  7. wrzucDoBazy(dane); // I TUTAJ MASZ OD RAZU WRZUCAC DO BAZY A NIE TY WRZUCANIE ROBISZ GDZIESZ INDZIEJ GDZIE TRACISZ AKTUALNY OBROT PETLI
  8.  
  9. }


To poczytaj. Potem zapytaj ponownie, bo jak zrobic, to juz dostales nie raz tu odpowiedź.


OK. Spokojnie;)
Nie chce od razu wrzucać danych do bazy. To co dostaje z $id = (string)$v['id']; muszę wrzucać do kolejnego parsera, bo są to ścieżki do plików xml. ($doc->load("$path1")wink.gif. Czyli najpierw z pliku feeds.xml pobieram ściezkę do kolejnych plików xml, a dopiero te wrzucam do bazy.

Ten post edytował Frugo75 26.05.2014, 11:21:31
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To dlatego masz to wrzucac do tablicy. Pisano ci juz to wielokrotnie, wielokrotnie też podano ci jak to wrzucać. jesli nadal nie ogarniasz, zaprzyjaźniej sie w koncu z TABLICAMI - linka ci podalem.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Frugo75
post
Post #15





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(nospor @ 26.05.2014, 12:21:24 ) *
To dlatego masz to wrzucac do tablicy. Pisano ci juz to wielokrotnie, wielokrotnie też podano ci jak to wrzucać. jesli nadal nie ogarniasz, zaprzyjaźniej sie w koncu z TABLICAMI - linka ci podalem.

Dzięki za linka;) Łatwiej byłoby mi ogarnąć temat na tym przykładzie. wink.gif
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie watpie ze latwiej by ci bylo ogarnac, jakby ktos to zrobil za Ciebie. Ale za dwa dni bedziesz mial podobny problem i znowu klops... Ogarnij tablice, to bedziesz mial wiedze ogolną a nie tylko dla jednego przykladu
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Frugo75
post
Post #17





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(nospor @ 26.05.2014, 12:24:22 ) *
Nie watpie ze latwiej by ci bylo ogarnac, jakby ktos to zrobil za Ciebie. Ale za dwa dni bedziesz mial podobny problem i znowu klops... Ogarnij tablice, to nie bedziesz mial wiedze ogolną a nie tylko dla jednego przykladu

Może i masz rację.
Dzięki.

No i prawie zrobiłem. Mam tak:
  1. $plik = simplexml_load_file('feeds.xml');
  2. foreach ($plik->feed as $foo)
  3. {
  4. echo "<LI>";
  5. $idd[] = (string)$foo['path'];
  6. $cat_id = (string)$foo['cat_id'];
  7.  
  8.  
  9. foreach ($idd as $idr) {
  10.  
  11.  
  12.  
  13. $doc = new DOMDocument("1.0", "iso-8859-2");
  14.  
  15.  
  16. $doc->load($idr);

Ale jak wkładam to tutaj: $doc->load($idr); to mam: Warning: DOMDocument::load() [domdocument.load]: I/O warning : failed to load external entity "/74/2014-05-26/158813/158813.xml" in /mundial/news/index.php on line 56
/74/2014-05-26/158813/158813.xml -

Czyli zła ścieżka do pliku przez slasha. Powiecie mi jak w pętli go wyrzucić? Jeśli zastosuje substr to znów mam jeden plik.
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czemu dales foreach w foreach? Przeciez to nie ma sensu. Jedne foreach ma generowac twoją tablicę a drugi foreach ma iterowac po tej tablicy. Te foreach nie mają byc jeden w drugim.

Zas co do bledu, to wyraźnie ci napisano, ze nie moze odczytac /74/2014-05-26/158813/158813.xml Masz taki XML w ogole?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Frugo75
post
Post #19





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 13.06.2013

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


Cytat(nospor @ 26.05.2014, 15:39:39 ) *
Czemu dales foreach w foreach? Przeciez to nie ma sensu. Jedne foreach ma generowac twoją tablicę a drugi foreach ma iterowac po tej tablicy. Te foreach nie mają byc jeden w drugim.

ok Zaraz poprawię.
Cytat
Zas co do bledu, to wyraźnie ci napisano, ze nie moze odczytac /74/2014-05-26/158813/158813.xml Masz taki XML w ogole?

Tak, istnieje, ale w ścieżce 74/2014-05-26/158813/158813.xml. Nie wiem jak usunac tego slasha przed 74. Jak juz pisałem substr nie daje rady.

Cytat(Frugo75 @ 26.05.2014, 15:42:35 ) *
ok Zaraz poprawię.

Tak, istnieje, ale w ścieżce 74/2014-05-26/158813/158813.xml. Nie wiem jak usunac tego slasha przed 74. Jak juz pisałem substr nie daje rady.


Zrobiłem też tak i nadal nie działa. Jakby gdzies gubił pętlę.
  1.  
  2. $plik = simplexml_load_file('feeds.xml');
  3. foreach ($plik->feed as $foo)
  4. {
  5. echo "<LI>";
  6. $idd[] = (string)$foo['path'];
  7. $cat_id = (string)$foo['cat_id'];
  8.  
  9.  
  10. foreach ($idd as $idr) {
  11.  
  12.  
  13.  
  14. $rep = ltrim($idr,'/');
  15.  
  16.  
  17. $doc = new DOMDocument("1.0", "iso-8859-2");
  18. $doc->load($rep);

I w $doc->load($rep) wstawia tylko jedną ścieżkę. Ma ktoś pomysł jak usunąć "/" bez utraty pętli?

Ten post edytował Frugo75 26.05.2014, 14:45:59
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nadal masz petle w petli..... ltrim nie kasuje petli....


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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 Aktualny czas: 20.08.2025 - 09:09