Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP] Jak wziąć wszystkie pozycje z XML'a?
Forum PHP.pl > Forum > Przedszkole
Frugo75
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?
Turson
Bierzesz jedno bo tablicę musisz powiększać
nie $title = $matches->getElementsByTagName( "title" );
a $title[] = $matches->getElementsByTagName( "title" );
Frugo75
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.
Turson
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. }
Frugo75
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ć.
owca_82
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
Frugo75
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?
ibalyx
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? :-)
Frugo75
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.
nospor
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
Frugo75
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ć.
nospor
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ź.
Frugo75
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.
nospor
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.
Frugo75
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
nospor
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
Frugo75
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.
nospor
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?
Frugo75
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?
nospor
Nadal masz petle w petli..... ltrim nie kasuje petli....
Frugo75
Cytat(nospor @ 26.05.2014, 16:17:50 ) *
Nadal masz petle w petli..... ltrim nie kasuje petli....

To co ją kasuje?
nospor
Nic jej nie kasuje.... ciagle masz petle w petli.... miales to zmienic....

To jest petla w petli
  1. foreach (....){ //PETLA 1
  2. foreach (.....) {//PETLA2
  3. } //koniec PETLA2
  4. } //KONIEC PETLA1


A to nie jest petla w petli:
  1. foreach (....){ //PETLA 1
  2. } //KONIEC PETLA1
  3.  
  4. foreach (.....) {//PETLA2
  5. } //koniec PETLA2
  6.  

I tak wlasnie masz miec
Frugo75
Cytat(nospor @ 26.05.2014, 16:31:35 ) *
[/php]
I tak wlasnie masz miec


Mam tak:

  1. $plik = simplexml_load_file('feeds.xml');
  2. foreach ($plik->feed as $foo)
  3. {
  4.  
  5. $idd[] = ltrim((string)$foo['path'],'/');
  6. $cat_id = (string)$foo['cat_id'];
  7.  
  8.  
  9.  
  10.  
  11. }
  12.  
  13. foreach ($idd as $idr){
  14.  
  15.  
  16. echo $idr;
  17.  
  18.  
  19. $doc = new DOMDocument("1.0", "iso-8859-2");
  20. $doc->load($idr);
  21.  
  22. }


No i chyba działa;)
Dzięki.


Cytat
No i chyba działa;)
Dzięki.


Teraz bierze ostatni... F****
Turson
Nie dość, że da się to załatwić w jednej pętli, to bierze ostatni, bo tylko wczytujesz w drugiej pętli jakiś dokument ale nic z nim nie robisz i wczytujesz w kólko wszystkie jakie są w tablicy
Frugo75
Cytat(Turson @ 26.05.2014, 18:34:37 ) *
Nie dość, że da się to załatwić w jednej pętli, to bierze ostatni, bo tylko wczytujesz w drugiej pętli jakiś dokument ale nic z nim nie robisz i wczytujesz w kólko wszystkie jakie są w tablicy

Wkleje całość:

  1.  
  2. <?php
  3.  
  4. function str2url($str, $replace = "-" ){
  5. $str = iconv('UTF- 8', 'ASCII//TRANSLIT', $str);
  6.  
  7.  
  8.  
  9. $charsArr = array( '^', "'", '"', '`', '~');
  10. $str = str_replace( $charsArr, '', $str );
  11.  
  12. $return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($str))));
  13. return str_replace(' ', $replace, $return);
  14. }
  15. /*
  16. $doc = new DOMDocument("1.0", "iso-8859-2");
  17. $doc->load("feeds.xml");
  18.  
  19. $books = $doc->getElementsByTagName('feed');
  20. foreach ($books as $feed) {
  21.   echo $feed->nodeValue, PHP_EOL;
  22.  // echo $feed -> getAttribute('id').'<br>';
  23.   $path = $feed -> getAttribute('path');
  24.   $cat_id = $feed -> getAttribute('cat_id');
  25.   // echo $feed -> getAttribute('cat_id').'<br>';
  26. //echo $path;
  27.  
  28. //$path1
  29.  */
  30.  
  31. $plik = simplexml_load_file('feeds.xml');
  32. foreach ($plik->feed as $foo)
  33. {
  34.  
  35. $idd[] = ltrim((string)$foo['path'],'/');
  36. $cat_id = (string)$foo['cat_id'];
  37.  
  38.  
  39.  
  40. }
  41. foreach ($idd as $idr){
  42.  
  43.  
  44. //echo $idr."<br>";
  45.  
  46.  
  47. $doc = new DOMDocument("1.0", "iso-8859-2");
  48. $doc->load($idr);
  49.  
  50. echo $idr;
  51.  
  52. $feed = $doc->getElementsByTagName( "feed" );
  53. }
  54. foreach ($feed as $matches)
  55. {
  56.  
  57.  
  58. $title = $matches->getElementsByTagName( "title" );
  59. $tytul = $title->item(0)->nodeValue;
  60.  
  61. $content = $matches->getElementsByTagName( "content" );
  62. $tresc = $content->item(0)->nodeValue;
  63.  
  64. $id = $matches->getElementsByTagName( "id" );
  65. $export_id = $id->item(0)->nodeValue;
  66.  
  67. $add_date = $matches->getElementsByTagName( "add_date" );
  68. $date = $add_date->item(0)->nodeValue;
  69.  
  70.  
  71. //
  72.  
  73. $tytul1 = addslashes($tytul);
  74. $tresc1 = addslashes($tresc);
  75. $date1 = addslashes($date);
  76.  
  77. mysql_connect("*******","*******","******") or die(mysql_error());
  78. mysql_query("SET NAMES utf8");
  79. mysql_select_db("********");
  80.  
  81. $tresc1;
  82.  
  83.  
  84. $tylul1a=str2Url($tytul1);
  85.  
  86. mysql_query("INSERT INTO wp_posts (post_content, post_title, post_date, ID, post_name) VALUES ('".$tresc1."', '".$tytul1."', '".$date1."', '".$export_id."', '".$tylul1a."') ON DUPLICATE KEY UPDATE ID=VALUES(ID)") or die(mysql_error());
  87.  
  88.  
  89. mysql_query("INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id) VALUES ('$export_id', '2')") or die(mysql_error());
  90.  
  91. //$first = (explode("/", $path));
  92. //$path_cat = $first[1];
  93.  
  94. $path_cat = $cat_id;
  95.  
  96. if ($path_cat == 1) {
  97.  
  98. $cat = 13;
  99. }
  100.  
  101. elseif ($path_cat == 10) {
  102. $cat = 6;
  103. }
  104.  
  105. elseif ($path_cat == 80) {
  106. $cat = 8;
  107. }
  108. elseif ($path_cat == 36) {
  109. $cat = 11;
  110. }
  111.  
  112. elseif ($path_cat == 83) {
  113. $cat = 14;
  114. }
  115.  
  116. elseif ($path_cat == 84) {
  117. $cat = 12;
  118. }
  119.  
  120. elseif ($path_cat == 74) {
  121. $cat = 2;
  122. }
  123.  
  124. $reqwer = mysql_query("INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) VALUES ('$export_id', '$cat')") or die(mysql_error());
  125. //var_dump($reqwer);
  126.  
  127.  
  128.  
  129. //}
  130. }
  131.  
  132. ?>
nospor
W petli masz takie cos:
$feed = $doc->getElementsByTagName( "feed" );
i za kazdym razem w petli nadpisujesz ten $feed, przez co po zakonczeniu petli masz tylko ostatni $feed...
Frugo75
Cytat(nospor @ 26.05.2014, 21:08:49 ) *
W petli masz takie cos:
$feed = $doc->getElementsByTagName( "feed" );
i za kazdym razem w petli nadpisujesz ten $feed, przez co po zakonczeniu petli masz tylko ostatni $feed...


Kurde niestety nic to nie dało. Zamknąłem pętle wyżej i dalej to samo. Może to nie temat do przedszkola?smile.gif
nospor
Cytat
Może to nie temat do przedszkola?
No nie, zarowno problem jak i wiedza autora jak najbardziej pasuje tam gdzie jest wink.gif
Frugo75
Cytat(nospor @ 26.05.2014, 22:13:58 ) *
No nie, zarowno problem jak i wiedza autora jak najbardziej pasuje tam gdzie jest wink.gif


Wiedza to na 100 proc tutaj. Ale problem chyba poważny.wink.gif
Pomóż mi kolego nospor proszę.
nospor
Ja nadal nie ogarniam, czemu sie uparles ze te sciezki mają być w tablicy. Z kodu co teraz pokazales widac jak wol, że mozna spokojnie zrobic to co ci proponowal raz Turson a potem ja po nim powtorzylem - czyli, że zapisywac od razu do bazy na bieżąco, wszystkie obliczenia i zapis robic w glownej petli na biezaco.
Frugo75
Cytat(nospor @ 26.05.2014, 22:20:00 ) *
Ja nadal nie ogarniam, czemu sie uparles ze te sciezki mają być w tablicy. Z kodu co teraz pokazales widac jak wol, że mozna spokojnie zrobic to co ci proponowal raz Turson a potem ja po nim powtorzylem - czyli, że zapisywac od razu do bazy na bieżąco, wszystkie obliczenia i zapis robic w glownej petli na biezaco.


Nie upieram się, tylko mam jakiś blackout i nie wiem jak to zrobić.
nospor
Tak jak ci napisalismy podajac przykladowy kod - wszystko od razu na bieżącą w tej samej petli co pobierasz sciezki

I tak, upierales sie, bo kilkukrotnie ci na to zwracalismy uwage, a ty waliles ciagle swoje, ze tak nie moze byc bo cos tam..... potem pokazujesz caly kod i nagle sie okazuje, ze zadnego "bo cos tam " nie ma.
Frugo75
Cytat(nospor @ 26.05.2014, 22:34:10 ) *
Tak jak ci napisalismy podajac przykladowy kod - wszystko od razu na bieżącą w tej samej petli co pobierasz sciezki

I tak, upierales sie, bo kilkukrotnie ci na to zwracalismy uwage, a ty waliles ciagle swoje, ze tak nie moze byc bo cos tam..... potem pokazujesz caly kod i nagle sie okazuje, ze zadnego "bo cos tam " nie ma.


Świetnie mobilizujesz do samodzielnej pracy. Wskaż mi tylko drogę, a nią pójdę. Rozumiem o co chodzi, tylko nie wiem, jak mam od razu wrzucać dane, tak jak podpowiedziałeś z Tursonem.
Turson
Tworzysz tablicę $idd po to, żeby lecieć po niej potem foreachem i deklarujesz zmienną $feed, którą znowu traktujesz foreachem. Zauważ, że to bez sensu powtarzać to samo enty raz.
Frugo75
Cytat(Turson @ 26.05.2014, 22:40:07 ) *
Tworzysz tablicę $idd po to, żeby lecieć po niej potem foreachem i deklarujesz zmienną $feed, którą znowu traktujesz foreachem. Zauważ, że to bez sensu powtarzać to samo enty raz.


OK. Tylko to jest taki układ, że plik feed.xml pokazuje ścieżki do innych plików xml, które to właśnie pliki mają być wrzucane do bazy.
A jak robię tak jak Wy podpowiadacie to mam bład: Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]: Entity: line 1: parser error : Start tag expected, '<' not found in /mundial/news/index.php on line 46

a kod mam taki

  1.  
  2.  
  3. $plik = new SimpleXMLElement('feeds.xml');
  4.  
  5. foreach($plik->feeds->feed as $v){
  6.  
  7. $id = (string)$v['path'];
  8. echo $id;
  9.  
  10.  
  11. }
nospor
Musisz wszystko robic na bieżaco

  1. $plik = simplexml_load_file('feeds.xml');
  2. foreach ($plik->feed as $foo) {
  3. $idr = ltrim((string)$foo['path'],'/');
  4. $cat_id = (string)$foo['cat_id'];
  5. $doc = new DOMDocument("1.0", "iso-8859-2");
  6. $doc->load($idr);
  7. $feed = $doc->getElementsByTagName( "feed" );
  8.  
  9. foreach ($feed as $matches) {
  10. //I TU TWOJ KOD OD BAZY. NIE WKLEJALEM GO JUZ BO ZA DLUGI
  11. }
  12. }

Tu naprawde nie ma zadnej filozofii
Frugo75
Cytat(nospor @ 27.05.2014, 08:46:19 ) *
Musisz wszystko robic na bieżaco


[/php]
Tu naprawde nie ma zadnej filozofii


Dziękuje, jednak... wrzuca tylko jedną. Mam taki kod:

  1.  
  2. <?php
  3.  
  4. function str2url($str, $replace = "-" ){
  5. $str = iconv('UTF- 8', 'ASCII//TRANSLIT', $str);
  6.  
  7.  
  8.  
  9. $charsArr = array( '^', "'", '"', '`', '~');
  10. $str = str_replace( $charsArr, '', $str );
  11.  
  12. $return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($str))));
  13. return str_replace(' ', $replace, $return);
  14. }
  15.  
  16.  
  17. $plik = simplexml_load_file('feeds.xml');
  18. foreach ($plik->feed as $foo) {
  19. $idr = ltrim((string)$foo['path'],'/');
  20. $cat_id = (string)$foo['cat_id'];
  21. $doc = new DOMDocument("1.0", "iso-8859-2");
  22. $doc->load($idr);
  23. $feed = $doc->getElementsByTagName( "feed" );
  24.  
  25. foreach ($feed as $matches) {
  26.  
  27.  
  28.  
  29.  
  30.  
  31. $title = $matches->getElementsByTagName( "title" );
  32. $tytul = $title->item(0)->nodeValue;
  33.  
  34. $content = $matches->getElementsByTagName( "content" );
  35. $tresc = $content->item(0)->nodeValue;
  36.  
  37. $id = $matches->getElementsByTagName( "id" );
  38. $export_id = $id->item(0)->nodeValue;
  39.  
  40. $add_date = $matches->getElementsByTagName( "add_date" );
  41. $date = $add_date->item(0)->nodeValue;
  42.  
  43.  
  44.  
  45.  
  46. $tytul1 = addslashes($tytul);
  47. $tresc1 = addslashes($tresc);
  48. $date1 = addslashes($date);
  49.  
  50. mysql_query("SET NAMES utf8");
  51.  
  52. $tresc1;
  53.  
  54.  
  55. $tylul1a=str2Url($tytul1);
  56.  
  57. mysql_query("INSERT INTO wp_posts (post_content, post_title, post_date, ID, post_name) VALUES ('".$tresc1."', '".$tytul1."', '".$date1."', '".$export_id."', '".$tylul1a."') ") or die(mysql_error());
  58.  
  59.  
  60. mysql_query("INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id) VALUES ('$export_id', '2')") or die(mysql_error());
  61.  
  62.  
  63. $path_cat = $cat_id;
  64.  
  65. if ($path_cat == 1) {
  66.  
  67. $cat = 13;
  68. }
  69.  
  70. elseif ($path_cat == 10) {
  71. $cat = 6;
  72. }
  73.  
  74. elseif ($path_cat == 80) {
  75. $cat = 8;
  76. }
  77. elseif ($path_cat == 36) {
  78. $cat = 11;
  79. }
  80.  
  81. elseif ($path_cat == 83) {
  82. $cat = 14;
  83. }
  84.  
  85. elseif ($path_cat == 84) {
  86. $cat = 12;
  87. }
  88.  
  89. elseif ($path_cat == 74) {
  90. $cat = 2;
  91. }
  92.  
  93. $reqwer = mysql_query("INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) VALUES ('$export_id', '$cat')") or die(mysql_error());
  94.  
  95.  
  96.  
  97.  
  98.  
  99. }
  100. }
  101.  
  102. ?>
nospor
1) Łączenie z bazą ma być poza pętlami...
2) I co, wrzuca tylko jeden rekord i nie pluje żadnym błędem?
3) Wyswietlaj sobie stan danych zmiennych byś wiedział na jakim etapie jesteś w danej chwili. Może pobiera ci tylko jedną dane i dlatego tylko ją wrzuca.
Frugo75
Cytat(nospor @ 27.05.2014, 12:33:34 ) *
1) Łączenie z bazą ma być poza pętlami...
2) I co, wrzuca tylko jeden rekord i nie pluje żadnym błędem?
3) Wyswietlaj sobie stan danych zmiennych byś wiedział na jakim etapie jesteś w danej chwili. Może pobiera ci tylko jedną dane i dlatego tylko ją wrzuca.


1. ok
2. Wrzuca pierwszą z feeds.xml i info "Duplicate entry '158869' for key 'PRIMARY'"
3. Dobrze. Ale to wieczorkiem.
nospor
Cytat
2. Wrzuca pierwszą z feeds.xml i info "Duplicate entry '158869' for key 'PRIMARY'"

facepalmxd.gif
Naprawde nie mogles wczesniej samemu wpasc na to by podac nam blad, ktory rzuca ci baza??

No i juz wiesz czemu dodaje ci tylko jeden rekord. Bo baza rzuca blad i informuje cie co sie jej nie podoba
Frugo75
Cytat(nospor @ 27.05.2014, 13:05:53 ) *
facepalmxd.gif
Naprawde nie mogles wczesniej samemu wpasc na to by podac nam blad, ktory rzuca ci baza??

No i juz wiesz czemu dodaje ci tylko jeden rekord. Bo baza rzuca blad i informuje cie co sie jej nie podoba


Nie do końca tak. Nawet jak mam czystą bazę i puszczam skrypt, to dodaje tylko jeden i dalej nie idzie. Czy nie powinno być tak, że skoro jest duplikat, to bierze następny?
nospor
Nie, bo dales DIE a DIE konczy wykonywanie skryptu natychmiast :/
Frugo75
Cytat(nospor @ 27.05.2014, 13:30:27 ) *
Nie, bo dales DIE a DIE konczy wykonywanie skryptu natychmiast :/

Chyba działa. Jeszcze na bazie pozmieniałem primary na index.
Dzięki wielkie Panowie. Myślę jak Wam tu się odwdzięczyć.
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.