Avatar billede Slettet bruger
14. december 2009 - 11:27 Der er 9 kommentarer og
1 løsning

XML problem

Hej.
Jeg har et lille problem med at udskrive XML pga. der er et : (kolon) i teksten.

Jeg kan desværre ikke ændre i XML filen da jeg får det et andet sted fra, så håber der er nogle der kan hjælpe.

Det er følgende jeg prøver at udskrive:


    <item>
        <media:text>Overskrift</media:text>
        <media:thumbnail url="test.jpg" />       
    </item>   


Her er min kode:
(Nogle der har et script der kan klare det, så er det også super fint.. Behøver ikke være mit eget.

<?php
// Sti til xml fil
$file = "test.xml";

// Indlæs indholdet af filen til en streng
$file = file_get_contents($file);

// Byg xml streng med indholdet af filen
$xml = simplexml_load_string($file);

// Gem værdier i nye variabler
$text = str_replace('NU: ', '', utf8_decode($xml->item->media:text));
$thumb = utf8_decode($xml->item->media:thumbnail);


// Udskriv
echo $text." - ".$thumb." Listen er komplet";?>
Avatar billede repox Seniormester
14. december 2009 - 11:57 #1
Der må ligge en namespace angivelse af media elementet.
Den attribut som namespacet har fået kan du så anvende.
F.eks. hvis media namespacet er angivet med

xmlns:media="http://www.w3.org/TR/html4/"


kan du få fat i dine elementer således:


<?php
...

  $xml = simplexml_load_string($file);
  $item = $xml->item->children("http://www.w3.org/TR/html4/");
  $text = (string)$item->text;
  $thumb = (string)$item->thumbnail;

...
?>

Avatar billede Slettet bruger
14. december 2009 - 12:07 #2
Hej repox.

Jeg fandt ud af det var noget namespace, men er lidt lost på det så godt du kom med lidt hjælp. :-)

Den brokker sig dog lidt og kommer med følgende:
(Det er $text og $thumb linjen).


Warning: main() [function.main]: Node no longer exists in /link/top40.php on line 168

Warning: main() [function.main]: Node no longer exists in /link/top40.php on line 169

Men når det er følgende:

  <item>
        <media:text>Overskrift</media:text>
        <media:thumbnail url="test.jpg" />       
    </item>   

Skal media ikke også tilføjes så?
Avatar billede repox Seniormester
14. december 2009 - 12:27 #3
Nej, det bør det ikke skulle..
Kunne jeg eventuelt se hele XML filen?
Avatar billede Slettet bruger
14. december 2009 - 12:32 #4
yes, selvfølgelig... den kommer her:

(Lidt er ændret, men burde være det samme som før).

<?xml version="1.0" encoding="UTF-8"?>
<gallery xmlns:media="http://search.yahoo.com/mrss/">
        <settings>
        <mediaFolder type="large" media="video">video/</mediaFolder>
        <mediaFolder type="thumbnail" media="video">wallimages/thumbs/</mediaFolder>
        <mediaFolder type="large" media="swf">video/</mediaFolder>
        <mediaFolder type="thumbnail" media="swf">video/thumbs/</mediaFolder>
        <mediaFolder type="large" media="image">wallimages/</mediaFolder>
        <mediaFolder type="thumbnail" media="image">wallimages/thumbs/</mediaFolder>
    </settings>
   
    <item>
        <media:text>1. Lady Gaga - Paparazzi</media:text>
        <media:content url="http://www.youtube.com/watch?v=JNZM-BJN9SI" type="video/x-flv" width="560" height="340" />
        <media:thumbnail url="ladygaga-paparazzi.jpg" />       
    </item>       
   
    <item>
        <media:text>2. Cascada -  Evacuate the dancefloor</media:text>
        <media:content url="http://www.youtube.com/watch?v=A68j28KQaik" type="video/x-flv" width="560" height="340" />
        <media:thumbnail url="cascada-evacuate.jpg" />   
    </item>
   
    <item>
        <media:text>3. ABC - My Way</media:text>
        <media:content url="http://www.youtube.com/watch?v=KmkGTIOKrIM" type="video/x-flv" width="560" height="340" />
        <media:thumbnail url="abc-myway.jpg" />   
    </item>   
   
    <item>
        <media:text>4. Carpark North - Save me from myself</media:text>
        <media:content url="http://www.youtube.com/watch?v=O-s9Uoq0NW8" type="video/x-flv" width="560" height="340" />
        <media:thumbnail url="carpark-saveme.jpg" />
    </item>

</gallery>
Avatar billede Slettet bruger
14. december 2009 - 12:33 #5
Og her er min kode som jeg præcis har lavet den:

<?php

// Sti til xml fil
$file = "test.xml";


// Indlæs indholdet af filen til en streng
$file = file_get_contents($file);


$xml = simplexml_load_string($file); 
$item = $xml->item->children("http://search.yahoo.com/mrss/"); 
$text = (string)$item->text; 
$thumb = (string)$item->thumbnail;

// Udskriv noget
echo $text." - ".$thumb." Blot en test";?>
Avatar billede repox Seniormester
14. december 2009 - 12:48 #6
Det er bestemt ikke nemt at rode med, og det kræver at man lige ved hvor man kan falde i henne...

Men jeg testede med dette script:


<?php

    $xml = file_get_contents("test.xml");
    $xml = new SimpleXMLElement($xml);

    foreach($xml->item as $item)
    {
        $media = $item->children("http://search.yahoo.com/mrss/");
        $thumbAttributes = $media->thumbnail->attributes();

        $thumb = $thumbAttributes["url"];
        $text = $media->text;

        echo $text." - ".$thumb." Blot en test";

    }


?>



Og det virker - for mig...
Avatar billede Slettet bruger
14. december 2009 - 12:57 #7
Så virker det.... Ved ikke lige hvor det gik galt før, men er bange for jeg havde lavet lidt ged i min url til xml filen. :-)

Ja synes også det var lidt uoverskueligt, men nu når vi har fået det til at virke - så kan jeg godt følge det nu med namespace.
Egentlig ret smart.

Så kan jeg komme lidt videre i mit projekt, efter en stor kamp med XML. Har ikke arbejdet så meget med det før.

Men tusinde tak, det var en stor hjælp. :-)

Send bare svar.

Mvh.
Henrik
Avatar billede repox Seniormester
14. december 2009 - 13:08 #8
Det fik du her.
Avatar billede Slettet bruger
14. december 2009 - 14:16 #9
Lige et sidste spørgsmål... Hvis jeg vil lave et link til hver "item", kan jeg det? Altså så jeg f.eks. trykker på "text" og så ryger man til url'et jeg har skrevet? (Og naturligvis tilføjer den i namespace).
Avatar billede repox Seniormester
15. december 2009 - 08:44 #10
<?php
    $xml = file_get_contents("test.xml");
    $xml = new SimpleXMLElement($xml);

    foreach($xml->item as $item)
    {
        $media = $item->children("http://search.yahoo.com/mrss/");
        $thumbAttributes = $media->thumbnail->attributes();
        $contentAttributes = $media->content->attributes();

        $thumb = $thumbAttributes["url"];
        $link = $contentAttributes["url"];
        $text = $media->text;

        echo $text." - ".$thumb." - ".$link." Blot en test";

    }
?>
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