Avatar billede jeg_var_gangsta Nybegynder
20. oktober 2006 - 00:17 Der er 6 kommentarer og
1 løsning

Træk data fra et CML-dokument

Hej.

Jeg skal trække nogle produktdata ud fra et xml-dokument, som er sat op således, at kun et enkelt produkt vises i xml-dokumentet ad gangen. Ex.:
http://min.shop/vis_prod.php?id=456
vil generere filen:
<?xml version="1.0" encoding="UTF-8"?>
<projektnavn>
    <produkt>
        <pid>456</pid>
        <title>Produkt-titel</title>
        <description>...Beskrivelse...</description>
        <image>http://image.url/</image>
    </produkt>
</projektnavn>

Hvordan kan jeg fra en anden php-fil få vist disse data?

Vh. Christian :)
Avatar billede coderdk Praktikant
20. oktober 2006 - 00:25 #1
hvis det vitterligt er så simpelt et dokument hver gang, ville jeg ikke gide at parse det, men i stedet bruge preg_match, f.eks. som:

if ( preg_match( "#d>(\d+)</p.*?le>(.*?)</t.*?n>(.*?)</d.*?ge>(.*?)</i#s", $xml, $m ) )
{
  echo "Pid: $m[1] Title: $m[2] Description: $m[3] Image: $m[4]";
}
else
{
  echo "'Parsing' mislykkedes...";
}
Avatar billede jeg_var_gangsta Nybegynder
20. oktober 2006 - 08:18 #2
Det lyder godt! Og dokumentet er virkelig så simpelt hver gang, så jeg tror jeg vil forsøge mig med din løsning. Kan du en kodestump, som kan få det til at køre? Altså en, som også åbner min xml-fil, henter data osv.. :)?

Vh. Christian
Avatar billede jeg_var_gangsta Nybegynder
20. oktober 2006 - 10:14 #3
I øvrigt beklager jeg min trykfejl i emnet - der skulle selfølgelig stå "XML", og ikke "CML". Hvis en admin kan rette det, vil det være super. :)
Avatar billede jeg_var_gangsta Nybegynder
20. oktober 2006 - 10:20 #4
Så er den der:
<?php
$file = "http://min.shop/vis_prod.php?id=".$pid;
$fp = fopen($file, "r");
$xml = fread($fp, 4096);

if ( preg_match( "#d>(\d+)</p.*?le>(.*?)</t.*?n>(.*?)</d.*?ge>(.*?)</i#s", $xml, $m ) )
{
  echo "Pid: $m[1]<br />";
  echo "Title: $m[2]<br />";
  echo "Description: $m[3]<br />";
  echo "Image: $m[4]";
}
else
{
  echo "'Parsing' mislykkedes...";
}
?>

Jeg takker mange gange! Læg venligst et svar :)
Avatar billede coderdk Praktikant
20. oktober 2006 - 12:14 #5
Aight :)
Avatar billede jeg_var_gangsta Nybegynder
20. oktober 2006 - 13:25 #6
Sådan :)

Kunne du i øvrigt prøve at "adskille" det regulære udtryk..? Altså så jeg selv nemt kan tilføje flere tags. Lidt uddybende forklaring ville heller ikke skade :)

På forhånd tak!
Avatar billede coderdk Praktikant
20. oktober 2006 - 13:34 #7
hehe ok:

#d>(\d+)</p.*?le>(.*?)</t.*?n>(.*?)</d.*?ge>(.*?)</i#s

# er "delimiter"

d>(\d+)</p = match pid, i.e. <pi"d>123</p"id> (" er det jeg matcher på)
*?le>(.*?)</t = match title, altså <tit"le>Produkt-titel</t"itle>
osv... Det ville måske være pænere med fulde tags, det fylder bare mere:

#<pid>(\d+)</pid>.*?<title>(.*?)</title>.*?<description>(.*?)</description>.*?<image>(.*?)</image>#s

#s - altså switchen "s" angiver at . også skal matche newlines (\n)
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