Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 19:53 Der er 29 kommentarer og
1 løsning

Simpel parsing af XML

Jeg har nu kæmpet en del med at få parset et XML-dokument.

Dokumentet overholder standard, og det 'eneste' jeg skal, er at læse dokumentet i php og få indholdet vist på en anden php-side. Gerne så de forskellige values er i variabler.

Jeg har forsøgt mig med nogle forskellige metoder (bl.a. simple XML), men jeg er endt i blindgyder hver gang.

Er der nogen, der har en enkel fremgangsmåde til at hive et link ind (xml-dokument genereret af en php-side) og få indholdet tilgængeligt i variabler eller lignende, der så kan skrives ud på siden?

Jeg har læst diverse tutorials og guides, men det bliver lige en anelse for langhåret til mig :)
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:01 #1
Bruger du PHP 5 ?
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:08 #2
Jeps.
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:12 #3
Det er godt, andet gider vi heller. Prøv at tjekke i en  <?php phpinfo(); ?>  om ikke du har DOMXML enabled:

DOM/XML     enabled
DOM/XML API Version     20031129
libxml Version     2.6.26
HTML Support     enabled
XPath Support     enabled
XPointer Support     enabled
Schema Support     enabled
RelaxNG Support     enabled

Og giv os så lige en prøve på din XML-fil.
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:18 #4
Den er enabled på min egen server, men jeg laver en side, som skal ligge et andet sted, og der ved jeg ikke, om de har DOMXML enabled :/

XML-eksempel:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<ITEMS>
<PICK>
        <DATE>2007-09-05</DATE>
        <SPORT>Fodbold</SPORT>
        <GAME>R-S</GAME>
        <OURPICK>1</OURPICK>
        <ODDS>1,65</ODDS>
        <BETBEFORE>18:00</BETBEFORE>
        <BOOKMAKER>Betsson</BOOKMAKER>
        <BOOKIELINK><![CDATA[http://www.betsson.com/?from=bookiesdk]]></BOOKIELINK>
        <UNITS>300</UNITS>
        <COMMENT><![CDATA[RS er startet s&aelig;sonen katastrofalt.  ]]></COMMENT>
</PICK>
</ITEMS>
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:36 #5
Ok, men det er da et forsøg værd. Hvis XML-filen er så simpel, så kan man nøjes med nedenstående, se http://n0p.com/795033.php

<?php

    $dom = new DOMDocument();
    $dom->load("795033.xml");
   
    $DATE = $dom->getElementsByTagName('DATE');
    $DATE = $DATE->item(0);
    $DATE = $DATE->nodeValue;

    $SPORT = $dom->getElementsByTagName('SPORT');
    $SPORT = $SPORT->item(0);
    $SPORT = $SPORT->nodeValue;

    $GAME = $dom->getElementsByTagName('GAME');
    $GAME = $GAME->item(0);
    $GAME = $GAME->nodeValue;

    $OURPICK = $dom->getElementsByTagName('OURPICK');
    $OURPICK = $OURPICK->item(0);
    $OURPICK = $OURPICK->nodeValue;

    print "DATE: $DATE<br>";
    print "SPORT: $SPORT<br>";
    print "GAME: $GAME<br>";
    print "OURPICK: $OURPICK<br>";

?>
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:38 #6
Virker det også i FireFox? Synes jeg fandt noget lignende i starten, som kun virkede i IE nemlig.
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:40 #7
PHP afvikles på en server, og har intet med eventuel browser at gøre.
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:41 #8
Hmmm... den siger:


Warning: DOMDocument::load() [function.DOMDocument-load]: XML declaration allowed only at the start of the document in /home/dk/xxxxxx/wwwroot/www/xxxxx.php, line: 82 in /home/dk/xxxxxx/wwwroot/www/yyyy.php on line 4

Hvor den første med 82 er i den fil, den inkluderer. Her er deklarationen godt nok på linje 82 - men alt derover er php der ikke printes.
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:45 #9
Mon ikke den har ret ;) Det plejer de dumme 'putere jo at ha'

Hvordan skriver du de her 2 linier:
    $dom = new DOMDocument();
    $dom->load("795033.xml");
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:46 #10
Øhm, siger du:    $dom->load("noget.php");    så udføres PHP-koden jo ikke. Det skal være en ren XML-tekst.
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:48 #11
$dom = new DOMDocument();
$dom->load("xxxx.php");

Ligesom du skrev :)

Vil tro noget i den php-fil gør fejlen :/ (er desværre først online igen i morgen)
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:48 #12
nåja... det gør jeg... XML-en genereres af php-filen dynamisk.... hvordan gør jeg så?
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:49 #13
Ja, al PHP-koden gør noget - det læses, men udføres ikke, og kan slet ikke genkendes som  XML, og skal selvfølgelig heller ikke. Kan du forklare hvordan det hænger sammen?
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:51 #14
Det der bliver genereret i XML er dynamisk og bliver hentet fra en database hver dag. Det skal så lægges ud i XML-format, så en anden side kan læse og præsentere det.
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:54 #15
Ikke helt forstået - det kører jo på samme server.

Men har du sat det op til at tillade denne konstruktion, så kan du måske:

$dom->load("http://dit.dom.æne/xxxx.php");
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:55 #16
Nej - XML-filen lægger jeg ud på min server, og PHP-filen kommer til at ligge på en anden server.

Forestil dig, at jeg leverer data til et helt andet site, og jeg bare er så flink at lave det hele klar for dem :)
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 20:57 #17
Men umiddelbart fejler den ikke, når jeg bruger hele stien. Så er testen bare, om det så dur, når de smider php-filen op på deres server... håber at få det testet indenfor nogle dage, så vender jeg lige tilbage :)
Avatar billede erikjacobsen Ekspert
05. september 2007 - 20:57 #18
Så kan du jo bare læse XML-filen, og lade "de andre" om at finde ud af at finde den på din server.
Avatar billede kennethbon.dk Nybegynder
05. september 2007 - 21:01 #19
Se det forstod jeg ikke... - er det ikke det, jeg er i gang med?
Jeg skal lave den kode på deres side, der læser min xml-fil og viser indholdet i html... men det kræver jo, at jeg kan parse xml-filen for at vise indholdet?
Dvs deres side (som jeg laver) er en php-side, der skal hente indholdet af min genererede xml-fil.

Sorry - er ikke helt med på det her xml-hejs - men prøver lige ovenstående i første omgang :)
Avatar billede erikjacobsen Ekspert
05. september 2007 - 21:07 #20
Jeg tror vi snakker forbi hinanden. Den fil jeg læser ind, 795033.xml kan du kalde en XML-fil. Din xxxx.php er et PHP-script, som laver noget XML-data, når det udføres på en server (med http://...osv...) Du har som sådan ikke en XML-fil undervejs.
Avatar billede kennethbon.dk Nybegynder
06. september 2007 - 20:44 #21
Ja jeg vidste bare ikke om man kunne læse en php-fil og den så læste filen EFTER den var scriptet igennem.
Anyway - det virker på min personlige server, men på den server, hvor det skal køre, virker det ikke - måske fordi de kører en gammel version af PHP? Siden er i hvert fald bare helt blank - hvor den normalt skriver det helt korrekt ud.

Any clue?
Avatar billede erikjacobsen Ekspert
06. september 2007 - 20:56 #22
Helt blank kunne tyde på at fejlmeddelelser er slået fra.
Avatar billede kennethbon.dk Nybegynder
06. september 2007 - 20:57 #23
Ja - men jeg kan desværre ikke pille ved deres server :( Men de bruger kun PHP 4.3.9 - så måske vores kode ikke virker i PHP 4.x?
Avatar billede erikjacobsen Ekspert
06. september 2007 - 21:19 #24
Måske - men det ved vi jo ikke noget om, hvis der ikke kommer en fejlbesked. PHP4 er nu også ved at være vildt gammeldags.
Avatar billede kennethbon.dk Nybegynder
06. september 2007 - 21:26 #25
Næ - men eftersom det har virket på to servere med 5.x og nu ikke virker på en med 4.x - så går jeg ud fra, det er problemet. Jeg ved bare ikke, hvordan jeg løser det :(
Avatar billede erikjacobsen Ekspert
06. september 2007 - 21:31 #26
Man opgraderer til PHP5.
Avatar billede erikjacobsen Ekspert
06. september 2007 - 21:32 #27
Altså: efter min mening er det ren WOMBAT at gøre noget som helst med PHP4 - jo, måske, et eller andet, så kan det virke, men sikke da et spild af tid. (Waste Of Money Brains And Time)
Avatar billede kennethbon.dk Nybegynder
06. september 2007 - 21:37 #28
He okay - det siger jeg til dem :) Takker - du får pointene for at have fundet en løsning til 5.x, hvis du lige svarer
Avatar billede erikjacobsen Ekspert
06. september 2007 - 21:40 #29
Jeg samler slet ikke på point, tak. Du svarer selv, og accepterer eget svar.
Godt argument for PHP5: http://php.net/ se "PHP 4 end of life announcement".

Udover PHP5 kan der også være noget opsætning i PHP, der skal ændres, fx at tillade "http://..."
Avatar billede kennethbon.dk Nybegynder
06. september 2007 - 21:41 #30
He ja - men jeg kan ikke bestemme over deres setup, desværre - men tak for hjælpen :)
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

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