Avatar billede dk-andersson Nybegynder
17. marts 2010 - 16:05 Der er 16 kommentarer og
1 løsning

Lave xml med mysql data og php???

Hey

Skal lave en xml file som bliver gemt på server og bliver overskrevet hver gang siden bliver load.. men kan ikke rigtig finde noget godt omkring det på nette.. Håber der er nogen her som kan hjælpe mig lidt på vej.

Her er min xml kode som den skal se ud.
<?xml version="1.0" encoding="UTF-8"?>
<flvplayer>
  <settings>
      <streamtype></streamtype>
    <rtmp></rtmp>
    <application></application>
  </settings>
  <videoList>
      <videos>
          <filename><![CDATA[http://ugandachildcare.dk/film/projectucc.flv]]></filename>
        <name>Projectucc</name>
        <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas commodo dignissim lacus, eu dapibus sapien eleifend ut. Phasellus sit amet mauris neque.</description>
        <thumb><![CDATA[http://ugandachildcare.dk/film/projectucc.jpg]]></thumb>
      </videos>
  </videoList>
</flvplayer>

Og her er så det script som jeg har fundet men ikke rigtig kan finde ud af at ændre sådan at den printe xml file som den oven over vist og samtidigt gemmer xml filen på server og overskriver vise den findes i forvejen..

<?php
  $books = array();
  $books [] = array(
  'title' => 'PHP Hacks',
  'author' => 'Jack Herrington',
  'publisher' => "O'Reilly"
  );
  $books [] = array(
  'title' => 'Podcasting Hacks',
  'author' => 'Jack Herrington',
  'publisher' => "O'Reilly"
  );
 
  $doc = new DOMDocument();
  $doc->formatOutput = true;
 
  $r = $doc->createElement( "books" );
  $doc->appendChild( $r );
 
  foreach( $books as $book )
  {
  $b = $doc->createElement( "book" );
 
  $author = $doc->createElement( "author" );
  $author->appendChild(
  $doc->createTextNode( $book['author'] )
  );
  $b->appendChild( $author );
 
  $title = $doc->createElement( "title" );
  $title->appendChild(
  $doc->createTextNode( $book['title'] )
  );
  $b->appendChild( $title );
 
  $publisher = $doc->createElement( "publisher" );
  $publisher->appendChild(
  $doc->createTextNode( $book['publisher'] )
  );
  $b->appendChild( $publisher );
 
  $r->appendChild( $b );
  }
 
  echo $doc->saveXML();
  ?>


Hjælp
Avatar billede repox Seniormester
18. marts 2010 - 11:39 #1
Jeg tænker noget i denne stil:
    header("Content-Type: text/xml; charset=UTF-8");

    $xml = new SimpleXMLElement("<flvplayer/>");
    $settings = $xml->addChild("settings");
    //I dit eksempel har du ikke indhold i disse elementer
    //men det kan du bare tilføje som anden parameter.
    $settings->addChild("streamtype");
    $settings->addChild("rtmp");
    $settings->addChild("application");
   
    $videoList = $xml->addChild("videoList");
    $videos = $videoList->addChild("videos");
   
    $videos->addChild("filename", "http://ugandachildcare.dk/film/projectucc.flv");
    $videos->addChild("name", "Projectucc");
    $videos->addChild("description", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas commodo dignissim lacus, eu dapibus sapien eleifend ut. Phasellus sit amet mauris neque.");
    $videos->addChild("thumb", "http://ugandachildcare.dk/film/projectucc.jpg");
       
    echo $xml->asXML();


Er det noget i den stil? Så håber jeg du selv kan regne ud hvordan du skifter parametrene ud med indholdet fra MySQL...
Avatar billede dk-andersson Nybegynder
19. marts 2010 - 11:10 #2
Får denne fejl besked når jeg prøver at skrive min xml til en fil.. det skal sige at min kode ligger i en hel side med andet php script. Ønsker bare at oprettet en xml fil.

Fejl:
Warning: SimpleXMLElement::asXML() [simplexmlelement.asxml]: invalid character value in /customers/childcaredenmark.dk/childcaredenmark.dk/httpd.www/medie.php  on line 47

Min code:
    //header("Content-Type: text/xml; charset=UTF-8");
    xml = new SimpleXMLElement("<flvplayer/>");
    $settings = $xml->addChild("settings");
    //I dit eksempel har du ikke indhold i disse elementer
    //men det kan du bare tilføje som anden parameter.
    $settings->addChild("streamtype");
    $settings->addChild("rtmp");
    $settings->addChild("application");
   
    $videoList = $xml->addChild("videoList");
    $videos = $videoList->addChild("videos");
   
    $videos->addChild("filename", "<![CDATA[http://ugandachildcare.dk/film/".$film.".flv]]>");
    $videos->addChild("name", $titel);
    $videos->addChild("description", $dato."<br />".$beskr);
    $videos->addChild("thumb", "http://ugandachildcare.dk/film/".$film.".jpg");
       
    //echo $xml->asXML();
    $fil = fopen('xml_demo.xml', 'w');
    fwrite($fil, $xml->asXML());
    fclose($fil);

Hvordan får jeg header med over i xml filen
Avatar billede repox Seniormester
19. marts 2010 - 11:16 #3
Hvad er linie 47?
Avatar billede dk-andersson Nybegynder
19. marts 2010 - 11:25 #4
fwrite($fil, $xml->asXML());
Avatar billede repox Seniormester
19. marts 2010 - 11:42 #5
Du må have noget input som du ikke skal have i din XML, men det er svært at gætte på, når jeg ikke ved hvad du forsøger at komme i.
Avatar billede dk-andersson Nybegynder
19. marts 2010 - 11:59 #6
De variabler som du ser her indhold det samme som det første xml eksp.. du gav mig. Den eneste forskel er :
$videos->addChild("filename", "<![CDATA[http://ugandachildcare.dk/film/".$film.".flv]]>");

Der er der kommet <![CDATA[]]> med ind for det kræver flash afspiler for at det virker
Avatar billede repox Seniormester
19. marts 2010 - 12:02 #7
Nej, det er ikke den eneste forskel:
    $videos->addChild("name", $titel);
    $videos->addChild("description", $dato."<br />".$beskr);

Hvor kommer $titel, $dato og $beskr fra? Og hvad er indholdet i dem?
Avatar billede dk-andersson Nybegynder
19. marts 2010 - 12:13 #8
Har fundet frem til at fejlen sker i titel og beskr.. tænker på om det kan skylds special tegn som æøå??
Avatar billede repox Seniormester
19. marts 2010 - 12:19 #9
Ja, det kan det sagtens - hvis det ikke er i det korrekte tegnsæt, så vil den fejle.
Avatar billede dk-andersson Nybegynder
19. marts 2010 - 12:23 #10
Så er det her med løst... her er min løsning er den fin nok??

$beskr = utf8_encode(mysql_real_escape_string($row_f['beskr']));
$titel = $beskr = utf8_encode(mysql_real_escape_string($row_f['titel']));
Avatar billede repox Seniormester
19. marts 2010 - 12:31 #11
Uhm, jeg er ikke sikker på hvorfor du escaper dit indhold på vej ud? Og $titel samt $beskr må jo indeholde det samme? Men den den med utf8_encode er god nok...
Avatar billede dk-andersson Nybegynder
19. marts 2010 - 19:45 #12
okay.. har en sidste ting.. hvordan får jeg denne streng med ind under videos -> <closedcaptions>
            <cc begin="0" end="0">null</cc>
        </closedcaptions>
Avatar billede repox Seniormester
20. marts 2010 - 21:18 #13

  $closedcaptions = $videos->addChild("closedcaptions");
  $cc = $closedcaptions->addChild("cc", "null");
  $cc->addAttribute("begin", "0");
  $cc->addAttribute("end", "0");
Avatar billede dk-andersson Nybegynder
22. marts 2010 - 11:32 #14
<filename>&lt;![CDATA[http://ugandachildcare.dk/film/projectucc.flv]]&gt;</filename> hvorfor kommer denne ud sådan ??

og ikke sådan her

<filename><![CDATA[http://ugandachildcare.dk/film/projectucc.flv]]></filename>
Avatar billede repox Seniormester
22. marts 2010 - 11:56 #15
Det er fordi SimpleXML ikke understøtter cdata...
Du kan gøre som jeg gør:
    class SimpleXMLExtended extends SimpleXMLElement
    {
        public function addCData($cdata_text)
        {
            $node= dom_import_simplexml($this); 
            $no = $node->ownerDocument; 
            $node->appendChild($no->createCDATASection($cdata_text)); 
        } 
    }    
   
    header("Content-Type: text/xml; charset=UTF-8");

    $xml = new SimpleXMLExtended("<flvplayer/>");
    $settings = $xml->addChild("settings");
    $settings->addChild("streamtype");
    $settings->addChild("rtmp");
    $settings->addChild("application");
   
    $videoList = $xml->addChild("videoList");
    $videos = $videoList->addChild("videos");
   
    $filename = $videos->addChild("filename");
    $filename->addCData("http://ugandachildcare.dk/film/projectucc.flv");
   
    $videos->addChild("name", "Projectucc");
    $videos->addChild("description", "Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br /> Maecenas commodo dignissim lacus, eu dapibus sapien eleifend ut. Phasellus sit amet mauris neque.");
    $videos->addChild("thumb", "http://ugandachildcare.dk/film/projectucc.jpg");
       
    echo $xml->asXML();


Kort fortalt, så udvider jeg SimpleXML klassen med en funktion fra den oprindelige dom og så kan du se hvordan jeg benytter den nede hvor filnavnet bliver tilføjet.
Avatar billede dk-andersson Nybegynder
22. marts 2010 - 17:05 #16
Fik løst det med ren XML DOM. Hvis du smider et svar får du point
Avatar billede repox Seniormester
22. marts 2010 - 17:23 #17
Super :)
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