Avatar billede superb Nybegynder
06. maj 2008 - 21:29 Der er 13 kommentarer og
1 løsning

Hvad gør jeg forkert når jeg forsøger at parse xml?

Nogen der kan forklare mig hvad jeg laver forkert når jeg forsøger nedenstående:
<?
$tmp = array();

$xml = simplexml_load_file('http://ecs.amazonaws.co.uk/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=09SYHK2SNX6Q7SN54V02&Operation=ItemSearch&AssociateTag=bsearch-21&Version=2007-01-15&SearchIndex=Books&Keywords=genes&ResponseGroup=Medium,OfferFull');
    $xels = $xml->xpath('/ItemSearchResponse/Items/');
   
    foreach($xels as $item) {
        $tmp = array(
            'url' => (string)$item->Item->DetailPageURL,
            'price' => (string)$item->OfferListing->Price->Amount,
            'normalprice' => (string)$item->AmountSaved->FormattedPrice
        );
    }
print_r($tmp);
?>

et lille tillægs spørgsmål til 30 af pointene: i nedenstående kode henter jeg lidt info fra en side til et array, men får altid den nederste pris, den dyreste, og ville gerne istedet have den billigste øverst, hvorfor virker det ikke med $line[0] i koden som jeg har prøvet at skrive?
<?
$lines    = file('http://www.biblio.com/affiliate_search.php?aid=booksforlife&isbn=0553260219');
foreach ($lines as $line_num => $line) {
$temp = array();
$pieces = explode("\t", $line[0]);
$temp['Price'] = $pieces[7];
  $output = $temp;
  }
print_r ($output); ?>
Avatar billede jakobdo Ekspert
06. maj 2008 - 21:41 #1
foreach($xels as $item) {
        $tmp = array(
skal rettes til:
foreach($xels as $item) {
        $tmp[] = array(
Avatar billede jakobdo Ekspert
06. maj 2008 - 21:44 #2
Og dit tillægsspørgsmål.
Du indlæser hele siden i et array.

$lines.

$lines[0] vil indeholde den første linje.
$sidste_linje = count($lines) - 1;

$lines[$sidste_linje] vil indeholde den sidste linje.
Avatar billede superb Nybegynder
07. maj 2008 - 11:40 #3
hm den bliver ved med at sige Array ( ) i det første, har forsøgt at sige print_r($xels); men den bliver også bare blank.
Avatar billede jakobdo Ekspert
07. maj 2008 - 11:47 #4
Start evt med at udskriv:
var_dump($xml) lige efter du har kaldt: simplexml_load_file()
Avatar billede superb Nybegynder
07. maj 2008 - 18:55 #5
det gir en masse, men så går det galt et eller andet sted bagefer
Avatar billede jakobdo Ekspert
07. maj 2008 - 19:10 #6
Prøv at brug var_dump på din variabler fra top til bund.
Så kan det være du selv finder hvor kæden hopper af.
Avatar billede superb Nybegynder
07. maj 2008 - 19:16 #7
i var_dump($xels); siger den bare bool(false), så det må være der, men kan ikke se hvad jeg gør forkert der.
Avatar billede jakobdo Ekspert
07. maj 2008 - 20:44 #8
->xpath()

Return Values

Returns an array of SimpleXMLElement objects or FALSE in case of an error.

Så du har en fejl i din xpath ja. :o)
Avatar billede superb Nybegynder
07. maj 2008 - 22:25 #9
altså hvis jeg fjerner det sidste /, så får jeg ikke false mere, men får så bare array(0) { }, og det undrer mig egentlig endnu mere.
Avatar billede jakobdo Ekspert
08. maj 2008 - 08:25 #10
Ja, XML har jeg desværre ikke rodet så meget med, så der er jeg blank.
Avatar billede superb Nybegynder
11. maj 2008 - 17:42 #11
ok, ved du så ang. arrayet, hvordan man skal kalde det, for jeg har prøvet nedenstående, og $line[0] er jo den første, så jeg tænkte at man kunne lave en explode kun på den, men det virker af en eller anden grund ikke, men hvis jeg bare laver explode på $line, så virker det, men jeg får som tidligere beskrevet det sidste og dyreste resultat.

$lines    = file('http://www.biblio.com/affiliate_search.php?aid=booksforlife&isbn=0553260219');
foreach ($lines as $line_num => $line) {
$temp = array();
$pieces = explode("\t", $line[0]);
$temp['Price'] = $pieces[7];
  $output = $temp;
  }
print_r ($output); ?>
Avatar billede jakobdo Ekspert
11. maj 2008 - 18:48 #12
hvad med det jeg skrev her:

$lines[0] vil indeholde den første linje.
$sidste_linje = count($lines) - 1;

$lines[$sidste_linje] vil indeholde den sidste linje.
Avatar billede superb Nybegynder
11. maj 2008 - 19:15 #13
ja det også lines[0] jeg jo bruger, skal bruge den første linie, da de starter med de laveste numre og kører op, og hvis jeg ikke gør noget får jeg den sidste, så troede at hvis jeg satte $line[0] ind i explode ville det give den første, men det virker ikke.
Avatar billede superb Nybegynder
28. december 2012 - 00:02 #14
-
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB