Avatar billede compac Seniormester
03. juli 2010 - 21:24 Der er 5 kommentarer og
1 løsning

Oprette xml-script ud fra php-array

Jeg har et php-array hvor jeg ønsker at få dannet en php-fil med xml-indhold.

Mit array ser således ud:

    $files[] = array(
                  "name"=>$fil,
                  "lat"=>$Latitude,
                  "lng"=>$Longitude)                 
          }

Her er et eksempel på det output jeg kunne tænke mig:

-<locations>
<location id="1" name="London" lat="51.49945 lng="12.3456/>

</locations>
Avatar billede arne_v Ekspert
03. juli 2010 - 21:37 #1
Til inspiration:

<?php
$name = 'London';
$lat = 51.49945;
$long = 12.3456;
$files[] = array( 'name' => $name, 'lat' => $lat, 'long' => $long );
$wrt = new XMLWriter();
$wrt->openURI('php://output');
$wrt->startDocument();
$wrt->startElement('locations');
$wrt->startElement('location');
$wrt->writeAttribute('id', 1);
$wrt->writeAttribute('name', $name);
$wrt->writeAttribute('lat', $lat);
$wrt->writeAttribute('long', $long);
$wrt->endElement();
$wrt->endElement();
$wrt->endDocument();
?>
Avatar billede compac Seniormester
03. juli 2010 - 22:48 #2
Giver en udmærket fil.
Jeg skal bruge den til input i Google Maps - og det vil ikke lykkes med min egen fil.

Helt konkret vil jeg erstatte et udtræk fra en database til den php-fil jeg indledte spørgsmålet med.
Programmet ser oprendelig sådan ud:

<?php
$host = 'localhost';
$user = 'root';
$pass = 'pass';
$dbname = 'test';
if (!$db = mysql_connect($host, $user, $pass)) {
    echo 'Could not connect to mysql';
    exit;
}
if (!mysql_select_db($dbname, $db)) {
    echo 'Could not select database';
    exit;
}
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// HTTP/1.0
header("Pragma: no-cache");
//XML Header
header("content-type:text/xml");
$query = "SELECT location_id, name, lat, lng FROM locations WHERE 1";
$query = mysql_query($query);
echo "<locations>";
while ($row=mysql_fetch_assoc($query)){
    echo '<location id="'.$row['location_id'].'" name="'.$row['name'].'" lat="'.$row['lat'].'" lng="'.$row['lng'].'"/>';
}
echo "</locations>";
?>

Det erstatter jeg med mit array og xml-delen:

$i = count($files);
$wrt = new XMLWriter();
$wrt->openURI('las.php');
$wrt->startDocument();
$wrt->startElement('locations');

for($i = 0; $i < sizeof($files); ++$i)
  {
$id = $i;
$name = $files[$i]['name']; 
$lat = $files[$i]['lat'];
$lng = $files[$i]['lng'];
$wrt->startElement('location');
$wrt->writeAttribute('id', $i);
$wrt->writeAttribute('name', $name);
$wrt->writeAttribute('lat', $lat);
$wrt->writeAttribute('lng', $lng);
$wrt->endElement();
}
$wrt->endElement();

Tilsyneladende får outputfilen det rigtige udseende
(det samme som udtrækket fra databasen) -men??
Avatar billede compac Seniormester
03. juli 2010 - 22:53 #3
Glemte lige array-delen inden count-sætningen:
  $files[] = array("name"=>$fil,"lat"=>$Latitude,"lng"=>$Longitude)
Avatar billede arne_v Ekspert
04. juli 2010 - 04:27 #4
Jeg forstår ikke hvad problemet er.
Avatar billede compac Seniormester
04. juli 2010 - 14:38 #5
Næhh - det gør jeg heller ikke, men du gav mig i det mindste det svar, som jeg kunne have ønsket mig, så læg et svar
Avatar billede arne_v Ekspert
04. juli 2010 - 15:02 #6
svar
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
Kurser inden for grundlæggende programmering

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