Arent Opublikowano 17 Września 2008 Udostępnij Opublikowano 17 Września 2008 Jak sparsować ten plik XML, żeby wyodrębnić nie całą linię tylko konkretna wartość, np. 3_PRICE <?xml version="1.0" ?> - <DOCUMENT STATUS="OK"> - <DATA> <ITEM name="XXXX" 1_PRICE=70" ID="1" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="421" 5_PRICE="206" STATUS="dfdfd" /> </DATA> </DOCUMENT> z takim kodem próbowałem ale to zczytuje inną srukturę i w tym przypadku nie działa <?php $a = "0"; $connect = fopen("http://fgfffh...", "r") or die("Błąd przy łączeniu"); while (!feof($connect)) { $a++; $buffer = fgets($connect, 4096) or die("Błąd przy odczycie"); if($a == "166") { $link = $buffer; } }; fclose($connect); $link1 = strstr($link, 'xml'); $link2 = substr($link1, '0', '4'); $link = "http://fgfffh...".$link2; $a = "0"; $connect = fopen($link, "r") or die("Błąd przy łączeniu"); while (!feof($connect)) { $a++; $buffer = fgets($connect, 4096) or die("Błąd przy odczycie"); if($a == "25") {$value = $buffer;} } fclose($connect) or die("Błąd przy zamykaniu połączenia"); echo "$value<br>"; ?> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kryniak Opublikowano 17 Września 2008 Udostępnij Opublikowano 17 Września 2008 Użyj zewnętrznych narzędzi do parsowania XML. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 18 Września 2008 Autor Udostępnij Opublikowano 18 Września 2008 a jakie na ten przykład, bo ja tak szukam i nic nie mogę znaleść ps. a to dużo roboty, może mi ktoś zrobi za dobrego browara? przeleję paypalem, mbankiem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tata dens Opublikowano 18 Września 2008 Udostępnij Opublikowano 18 Września 2008 Arent, chcesz? Pisz na 5492750 :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 18 Września 2008 Udostępnij Opublikowano 18 Września 2008 Masz klasy: <?php class XML { private $level, $levels; function __construct( $file ) { if( !file_exists( $file ) ) { return; } if( ( $fh = @fopen( $file, 'r' ) ) === false ) { return; } $xml = xml_parser_create(); xml_parser_set_option( $xml, XML_OPTION_CASE_FOLDING, 1 ); xml_parser_set_option( $xml, XML_OPTION_SKIP_WHITE, 1 ); xml_set_element_handler( $xml, array( $this, 'elementStart' ), array( $this, 'elementEnd' ) ); xml_set_character_data_handler( $xml, array( $this, 'elementContent' ) ); $this->level = 0; $this->levels = array( $this ); while( ( $data = fread( $fh, 512 ) ) != false ) { if( !xml_parse( $xml, $data, feof( $fh ) ) ) { return; } } unset( $this->level ); unset( $this->levels ); xml_parser_free( $xml ); fclose( $fh ); } function elementStart( $xml, $name, $attrs ) { $element = new XMLElement( $name, $attrs ); $this->levels[$this->level]->childs[] = $element; $this->level++; $this->levels[$this->level] = $element; } function elementEnd( $xml, $name ) { $this->levels[$this->level]->content = trim( $this->levels[$this->level]->content ); $this->level--; } function elementContent( $xml, $content ) { $this->levels[$this->level]->content .= $content; } } class XMLElement { function __construct( $name, $attrs ) { $this->name = $name; $this->content = ''; $this->childs = array(); $this->attrs = array(); foreach( $attrs as $key => $value ) { $this->attrs[$key] = $value; } } } ?> Może coś Ci to pomoże. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tata dens Opublikowano 18 Września 2008 Udostępnij Opublikowano 18 Września 2008 Nie lepiej juz użyć DOM XML? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 19 Września 2008 Autor Udostępnij Opublikowano 19 Września 2008 Arent, chcesz? Pisz na 5492750 :D nie mam gadulca, zrobisz za dychę? jakby co to pisz na priva generalnie chodzi mi o wyciągnięcie DATE bądź NUMBER lub 4_PRICE, lokalizacja wg ID (tutaj ID="1") Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 19 Września 2008 Udostępnij Opublikowano 19 Września 2008 <?php $constents = file_get_contents( 'file.txt' ); //Wczytanie zawartości do bufora $items = array(); if( preg_match_all( '/<item(.+?) \/>/i', $constents, $matchItems ) ) { for( $i = 0; $i < count( $matchItems[0] ); $i++ ) { if( preg_match_all( '/([a-z0-9_]+?)="(.+?)"/i', $matchItems[1][$i], $matchItem ) ) { $item = array(); for( $a = 0; $a < count( $matchItem[0] ); $a++ ) { $item[strtolower( $matchItem[1][$a] )] = $matchItem[2][$a]; } if( isset( $item['id'] ) ) { $items[$item['id']] = $item; } } } } ?> Masz wszystko w tablicy items sortowane wg ID. Enjoy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 20 Września 2008 Autor Udostępnij Opublikowano 20 Września 2008 ale ja nie chcę nic sortować, chcę poprostu wyciągnąć np. 4_PRICE dla danego ID a poza tym kod nie działa, próbowałem na pliku z rozszerzeniem .xml.bat Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 20 Września 2008 Udostępnij Opublikowano 20 Września 2008 Kod działa, bo sprawdzałem na tym co Ty tu dałeś: <?xml version="1.0" ?> <DOCUMENT STATUS="OK"> <DATA> <ITEM name="XXXX" 1_PRICE=70" ID="1" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="421" 5_PRICE="206" STATUS="dfdfd" /> </DATA> </DOCUMENT> dostęp do przedmiotu jest przez: $items[ID_PRZEDMIOTU] a jeśli już chcesz 4_PRICE to: $items[ID_PRZEDMIOTU]['4_price'] w tym przypadku to: $items[1]['4_price'] kapisz? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 21 Września 2008 Autor Udostępnij Opublikowano 21 Września 2008 To jak ma wyglądać ten kod po zebraniu do kupy, bo tak siedzę i sprawdzam i nic Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 21 Września 2008 Udostępnij Opublikowano 21 Września 2008 Gdybym wiedział o co Ci dokładnie chodzi to bym Ci dokładnie powiedział jak to trzeba zrobić, ale że podajesz takie szczątkowe informacje to tutaj równie szczątkowa odpowiedź: doklej sobie ten mój kod do Twojego - oczywiście na końcu i podmień w swoim zmienną $value na $constents. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 21 Września 2008 Autor Udostępnij Opublikowano 21 Września 2008 To ma tak wyglądać? Sprawdziłem ale nie działa Jak już mówiłem chodzi mi o najprostrze wyciągnięcie liczby która jest w 4_price a następnie zapisanie jej w bazie mysql, to drugie to pryszcz, ale widzę że to pierwsze to problem <?php $a = "0"; $connect = fopen("http://..........xml.bat", "r") or die("Błąd przy łączeniu"); while (!feof($connect)) { $a++; $buffer = fgets($connect, 4096) or die("Błąd przy odczycie"); if($a == "166") { $link = $buffer; } }; fclose($connect); $link1 = strstr($link, 'xml'); $link2 = substr($link1, '0', '4'); $link = "http://..........xml.bat".$link2; $a = "0"; $connect = fopen($link, "r") or die("Błąd przy łączeniu"); while (!feof($connect)) { $a++; $buffer = fgets($connect, 4096) or die("Błąd przy odczycie"); if($a == "25") {$constents = $buffer;} } fclose($connect) or die("Błąd przy zamykaniu połączenia"); echo "$constents<br>"; $constents = file_get_contents( 'http://.....xml.bat' ); //Wczytanie zawartości do bufora $items = array(); if( preg_match_all( '/<item(.+?) \/>/i', $constents, $matchItems ) ) { for( $i = 0; $i < count( $matchItems[0] ); $i++ ) { if( preg_match_all( '/([a-z0-9_]+?)="(.+?)"/i', $matchItems[1][$i], $matchItem ) ) { $item = array(); for( $a = 0; $a < count( $matchItem[0] ); $a++ ) { $item[strtolower( $matchItem[1][$a] )] = $matchItem[2][$a]; } if( isset( $item[1] ) ) { $items[$item[1]['4_price'] = $item; } } } } ?> np. taki kod XML mam i chciałbym określając ID np. 4 oraz 4_PRICE wydobyć liczbę 346 <?xml version="1.0" ?> - <DOCUMENT STATUS="OK"> - <DATA> <ITEM name="XXXX" 1_PRICE=70" ID="1" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="421" 5_PRICE="206" STATUS="dfdfd" /> <ITEM name="XXXX" 1_PRICE=70" ID="2" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="46" 5_PRICE="206" STATUS="dfdfd" /> <ITEM name="XXXX" 1_PRICE=70" ID="3" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="21" 5_PRICE="206" STATUS="dfdfd" /> <ITEM name="XXXX" 1_PRICE=70" ID="4" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="346" 5_PRICE="206" STATUS="dfdfd" /> </DATA> </DOCUMENT> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 21 Września 2008 Udostępnij Opublikowano 21 Września 2008 Znasz tak się tak trochę na PHP czy raczej nie? :) <?php $connect = fopen( 'http://fgfffh...', 'r' ) or die( 'Błąd przy łączeniu' ); $a = 0; while( !feof( $connect ) ) { $a++; $buffer = fgets( $connect, 4096 ) or die( 'Błąd przy odczycie' ); if( $a == 166 ) { $link = $buffer; } } fclose( $connect ) or die( 'Błąd przy zamykaniu połączenia' ); $link1 = strstr( $link, 'xml' ); $link2 = substr( $link1, '0', '4' ); $link = 'http://fgfffh...' . $link2; $connect = fopen( $link, 'r' ) or die( 'Błąd przy łączeniu' ); $a = 0; while( !feof( $connect ) ) { $a++; $buffer = fgets( $connect, 4096 ) or die( 'Błąd przy odczycie' ); if( $a == 25 ) { $constents = $buffer; } } fclose( $connect ) or die( 'Błąd przy zamykaniu połączenia' ); $items = array(); if( preg_match_all( '/<item(.+?) \/>/i', $constents, $matchItems ) ) { for( $i = 0; $i < count( $matchItems[0] ); $i++ ) { if( preg_match_all( '/([a-z0-9_]+?)="(.+?)"/i', $matchItems[1][$i], $matchItem ) ) { $item = array(); for( $a = 0; $a < count( $matchItem[0] ); $a++ ) { $item[strtolower( $matchItem[1][$a] )] = $matchItem[2][$a]; } if( isset( $item['id'] ) ) { $items[$item['id']] = $item; } } } } echo $items[1]['4_price']; ?> Jak już jeszcze dopisałeś, to mój kod dla tego XMLa generuje taką tablicę: ID 1: name => XXXX id => 1 date => 17-09-2008 11:28:00 number => 300 2_price => 420 3_price => 13 4_price => 421 5_price => 206 status => dfdfd ID 2: name => XXXX id => 2 date => 17-09-2008 11:28:00 number => 300 2_price => 420 3_price => 13 4_price => 46 5_price => 206 status => dfdfd ID 3: name => XXXX id => 3 date => 17-09-2008 11:28:00 number => 300 2_price => 420 3_price => 13 4_price => 21 5_price => 206 status => dfdfd ID 4: name => XXXX id => 4 date => 17-09-2008 11:28:00 number => 300 2_price => 420 3_price => 13 4_price => 346 5_price => 206 status => dfdfd Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 21 Września 2008 Autor Udostępnij Opublikowano 21 Września 2008 hehe, dawno nie siedziałem w php i pozapominałem :) co do kodu do zrobiłem identycznie jak napisałeś i nie wywala błędu ale mam czystą stronę, w żródle strony też nie ma wartości którą chcę wydobyć mam tylko <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=windows-1250"></HEAD> <BODY></BODY></HTML> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 21 Września 2008 Udostępnij Opublikowano 21 Września 2008 A zrób zamiast echo $items[1]['4_price']; echo var_dump( $items ); I zacytuj co zwróci. Bo gdybym wiedział co dokładnie chcesz uzyskać i skąd to bym zrobił całość. Już pomijając to 4_PRICE z jakiegoś tam ID bo tyle wiem. =P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 21 Września 2008 Autor Udostępnij Opublikowano 21 Września 2008 zwrócilo array(0) { } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 21 Września 2008 Udostępnij Opublikowano 21 Września 2008 No to wynika z tego, że coś z odczytem jest nie tak. Ja Ci nie powiem dlaczego bo ja tego odczytu nie pisałem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 21 Września 2008 Autor Udostępnij Opublikowano 21 Września 2008 no ale przecież sprawdzałem na tym pliku to: <?xml version="1.0" ?> - <DOCUMENT STATUS="OK"> - <DATA> <ITEM name="XXXX" 1_PRICE=70" ID="1" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="421" 5_PRICE="206" STATUS="dfdfd" /> <ITEM name="XXXX" 1_PRICE=70" ID="2" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="46" 5_PRICE="206" STATUS="dfdfd" /> <ITEM name="XXXX" 1_PRICE=70" ID="3" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="21" 5_PRICE="206" STATUS="dfdfd" /> <ITEM name="XXXX" 1_PRICE=70" ID="4" DATE="17-09-2008 11:28:00" NUMBER="300" 2_PRICE="420" 3_PRICE="13" 4_PRICE="346" 5_PRICE="206" STATUS="dfdfd" /> </DATA> </DOCUMENT> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 21 Września 2008 Udostępnij Opublikowano 21 Września 2008 Na pewno? Może zamiast < i > jest > i < etc.? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 23 Września 2008 Autor Udostępnij Opublikowano 23 Września 2008 wszystko posprawdzałem i jest ok co tu może być źle skoro otwieram plik xml bezpośrednio w przeglądarce i wszystko jest ok podsumowując: przykładowy kod bezpośrednio z źródła strony xml <?xml version="1.0"?> <DOCUMENT STATUS="OK"> <DATA> <ITEM name="NAME" A="4219" ID="1" DATE="17-09-2008 11:28:00" X="300" B="4202" C="4213" D="1421" E="4206" STATUS="F" /> </DATA> </DOCUMENT> i plik php <?php $connect = fopen( 'http://www.plik.xml', 'r' ) or die( 'Błąd przy łączeniu' ); $a = 0; while( !feof( $connect ) ) { $a++; $buffer = fgets( $connect, 4096 ) or die( 'Błąd przy odczycie' ); if( $a == 166 ) { $link = $buffer; } } fclose( $connect ) or die( 'Błąd przy zamykaniu połączenia' ); $link1 = strstr( $link, 'xml' ); $link2 = substr( $link1, '0', '4' ); $link = 'http://www.plik.xml' . $link2; $connect = fopen( $link, 'r' ) or die( 'Błąd przy łączeniu' ); $a = 0; while( !feof( $connect ) ) { $a++; $buffer = fgets( $connect, 4096 ) or die( 'Błąd przy odczycie' ); if( $a == 25 ) { $constents = $buffer; } } fclose( $connect ) or die( 'Błąd przy zamykaniu połączenia' ); $items = array(); if( preg_match_all( '/<item(.+?) \/>/i', $constents, $matchItems ) ) { for( $i = 0; $i < count( $matchItems[0] ); $i++ ) { if( preg_match_all( '/([a-z0-9_]+?)="(.+?)"/i', $matchItems[1][$i], $matchItem ) ) { $item = array(); for( $a = 0; $a < count( $matchItem[0] ); $a++ ) { $item[strtolower( $matchItem[1][$a] )] = $matchItem[2][$a]; } if( isset( $item['id'] ) ) { $items[$item['id']] = $item; } } } } echo var_dump( $items ); ?> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 Podaj adres tego pliku XMLa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 23 Września 2008 Autor Udostępnij Opublikowano 23 Września 2008 z tego co się zorientować zdążyłem, to mam wyłączoną na serwerze obsługę simplexml, napisałem do hostingu i czekam na odpowiedź Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 24 Września 2008 Autor Udostępnij Opublikowano 24 Września 2008 dowiedziałem się że wystarczy zmienić rozszerzenie na .php5 spróbowałem z innym kodem, dużo krótszym ^_^ <? $xml = simplexml_load_file('plik.xml'); $ksiazki = $xml->xpath('/*/*'); foreach ($ksiazki as $item) { $ID = iconv($item['ID']); $E = iconv($item['E']); $DATE = iconv($item['DATE']); echo " Autor: $ID<br /> Tytuł: $E<br /> Cena: $DATE<br /> "; } ?> xml: <?xml version="1.0"?> <DOCUMENT STATUS="OK"> <DATA> <ITEM name="NAME" A="4219" ID="1" DATE="17-09-2008 11:28:00" X="300" B="4202" C="4213" D="1421" E="4206" STATUS="F" /> <ITEM name="NAME" A="219" ID="2" DATE="17-09-2008 11:28:00" X="30" B="402" C="423" D="121" E="406" STATUS="F" /> </DATA> </DOCUMENT> i mam Warning: iconv() expects exactly 3 parameters, 1 given in /xml/alg.php5 on line 6 Warning: iconv() expects exactly 3 parameters, 1 given in /xml/alg.php5 on line 7 Warning: iconv() expects exactly 3 parameters, 1 given in /xml/alg.php5 on line 8 Autor: Tytuł: Cena: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piczer Opublikowano 24 Września 2008 Udostępnij Opublikowano 24 Września 2008 To znaczy, ze funkcja iconv() przyjmuje trzy parametry, a podałeś tylko jeden. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 24 Września 2008 Autor Udostępnij Opublikowano 24 Września 2008 to jak powinien wyglądać ten kod? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piczer Opublikowano 25 Września 2008 Udostępnij Opublikowano 25 Września 2008 http://pl2.php.net/manual/pl/function.iconv.php Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 26 Września 2008 Autor Udostępnij Opublikowano 26 Września 2008 dzięki, ale już wczoraj poprawiłem kod :P mam inny problem, w źródle strony mam tylko to: Autor: <br /> Tytuł: <br /> Cena: <br /> mój serwer: http://blink.pl/dokumentacja.www.skrypty.html http://php.blink.pl/info.php5 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arent Opublikowano 1 Grudnia 2008 Autor Udostępnij Opublikowano 1 Grudnia 2008 Witajcie Zacząłem się nudzić i znowu odgrzebałem ten banalny kod który nie chce działać <? $xml = simplexml_load_file('plik.xml'); $ksiazki = $xml->xpath('/*/*'); foreach ($plik as $item) { $ID = iconv("ISO-8859-1","UTF-8", $item['X']); $E = iconv("ISO-8859-1","UTF-8", $item['E']); $DATE = iconv("ISO-8859-1","UTF-8", $item['DATE']); echo " 1: $X<br /> 2: $E<br /> 3: $DATE<br /> "; } ?> Jak napisałem, pojawia się tylko: 1: <br /> 2: <br /> 3: <br /> To wina hostingu? Bo kod wygląda na dobry Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 1 Grudnia 2008 Udostępnij Opublikowano 1 Grudnia 2008 Nie wygląda na dobry. Gdzie masz zmienną plik? :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się