Php - jak wydobyć dane z xml?


(Sitemaster) #1

Mam sobie kod w stylu

<?xml version="1.0" encoding="ISO-8859-2"?>



Zbyniek Śmietana
Setytułjakis
No i opis
Długi opis
19.99
0
0
0
976-83-7282-031-0
345
1
mojadomena.pl
0

/maly.gif
/3dcover.gif
/maly.jpg
/2dcover.jpg



...


...

Przetwarzam sobie xml do arraya i wybieram:print_r($wtablicy['testxml']['ebooks']['ebook']);pokazuje mi

Array ( [0] => Array ( [attr] => Array ( [idref] => 445 ) [category] => Array ( [attr] => Array ( [idref] => 15 ) ) [author] => Array ( [value] => Zbyniek Śmietana) [title] => Array ( [value] => Setytułjakiś ) [shortdescription] => Array ( [value] => No i opis) [description] => Array ( [value] => Długi opis ) [price] => Array ( [value] => 19.99 ) [printed_price] => Array ( [value] => 0 ) [targetprice] => Array ( [value] => 0 ) [pricestep] => Array ( [value] => 0 ) [isbn] => Array ( [value] => 976-83-7282-031-0 ) [pages] => Array ( [value] => 171 ) [status] => Array ( [value] => 3 ) [domain] => Array ( [value] => mojadomena.pl ) [printed_version] => Array ( [value] => 0 ) [covers] => Array ( [cover] => Array ( [0] => Array ( [value] => /maly.gif [attr] => Array ( [type] => 3d_small ) ) [1] => Array ( [value] => /3dcover.gif [attr] => Array ( [type] => 3d ) ) [2] => Array ( [value] => /2dcover-maly.jpg [attr] => Array ( [type] => 2d_small ) ) [3] => Array ( [value] => /2dcover.jpg [attr] => Array ( [type] => 2d ) ) ) ) )...

Nie wiem jak się teraz dobrać przykladowo do tytułu :frowning:

Niby print_r($wtablicy['testxml']['ebooks']['ebook']****[0]****['title']['value']

Sęk w tym że:

-muszę pobierać dane po idref

-jak wyczaić numer elementu w którym jest szukany idref? $wtablicy['testxml']['ebooks']['ebook']****[0]****['title']['value']

Nie wiem, czy jest inny sposób niż pobranie ilości elementów z $wtablicy['testxml']['ebooks']['ebook'] i sprawdzanie kolejno w petli?


(Kutar 0) #2

A nie prościej: http://pl2.php.net/manual/pl/ref.dom.php ?


(Sitemaster) #3

Ja cienki bolek w tym jestem.

Jak to zrobić z użyciem tego DOMa? Można jakiś przykład prosić bo z dokumentacji niewiele czaje?

Probowałem na start cos takiego jak w przykładach

ale m błedy wyskakują w związku z zaznaczona linią a wynikowa tablica dziko jwkoś wygląda. :frowning:


(Kutar 0) #4

Hmmm.... chodzi ci o wyciągnięcie ID kategorii dla każdego ebooka?

Jeśli tak, to dla dokumentu:

<?xml version="1.0" encoding="ISO-8859-2"?>



Zbyniek Śmietana
Setytułjakis
No i opis
Długi opis
19.99
0
0
0
976-83-7282-031-0
345
1
mojadomena.pl
0

/maly.gif
/3dcover.gif
/maly.jpg
/2dcover.jpg

użyj takiego kodu:

<?php

$xmlDoc = new DOMDocument();

$xmlDoc->load('plik.xml');


$ebook=$xmlDoc->getElementsByTagName('ebook');


foreach($ebook as $ebook)

{

$ebookid=$ebook->getAttribute('idref');

$category=$ebook->getElementsByTagName('category');

foreach($category as $category) {

$categoryid=$category->getAttribute('idref');

echo $ebookid.' - '.$categoryid.'
';

}

}


?>

(Sitemaster) #5

ten kod mi cos niedziała :frowning:

konkretnie chodzi mi o wyciągnięcie wszystkich ebooków gdzie np.

dodam jeszcze ze między ebooks i ebook będzie jeszcze jeden znacznik

czyli będzie np

Muszę wyciągnąć wszystkie ebooki z category idref=x i jeszcze jednego wybranego z ebook idref=y tak by dostać się do tagów w w tym title i tak dalje.


(Kutar 0) #6
<?php

$xmlDoc = new DOMDocument();

$xmlDoc->load('plik.xml');


$ebook=$xmlDoc->getElementsByTagName('ebook');


foreach($ebook as $ebook)

{

$ebookid=$ebook->getAttribute('idref');

$category=$ebook->getElementsByTagName('category');

foreach($category as $category) {

$categoryid=$category->getAttribute('idref');

if($categoryid==15) {

// tutaj instrukcje jeśli idref jest 15

}

}

}

?>

a ustawileś swoją nazwę pliku w linii:

$xmlDoc->load('plik.xml');

?

Oj... api... nie wiem co ty w sobie masz, ale ja nigdy nie moge cie zrozumiec xD

Możesz trochę jaśniej?


(Sitemaster) #7

Dalej coś nie działa.

:lol:

Ano mam w sobie to coś, jakiś urok, czar, czy wdzięk :stuck_out_tongue: :lol:

Dobra postaram się od samego początku i jasniej wszystko wyjaśnić.

Struktura kodu xml wygląda mniejwięcej tak

Gdzie będzie sporo ebooków a każdy będzie miał swoj unikalny identyfikator .

Ebooki jednak będą podzielone na kategorie, przykładowo reportaż, dokument, powieść i tak dalej. czyli kolejny identyfikator kategorii .

Jak widać po kodzie, gałąź kategorii, gałąż

i kilka innych znajduje się wewnątrz znacznika , ten z kolei w a ten z kolei w głównej gałęzi .

mając taki dokument muszę

-pobrać dane wszystkich ebooków pogrupowane po kategoriach, tak np. móc wyświetlić w osobnych tabelach (kazda tabela odpowiada wybranej kategorii) obrazek danego ebooka, jego tytuł, cene itd.

-pobrać dane konkretnego ebooka po jego unikalnym id.

Wracając do kodu i Twojego pytania o nazwę pliku.

Plik jest na innym serwerze i pobieram sibie jego zawartość do zmiennej $src przez CURL.

Czyli mam: $xmlDoc->load($src);


(adpawl) #8

No to daj $xmlDoc->loadXML($src); :wink:


(Sitemaster) #9

Jeeeee działaaaaaa :mrgreen:

Jeszcze jedno

jak wyciągnąć tytuł bo jak robię tak to mi błąd wywala


(adpawl) #10

przecież w category nie masz title!

Tak dostaniesz listę tytułów

A tak możesz je wyświetlić