Avatar billede kawaru Nybegynder
05. januar 2009 - 16:39 Der er 2 kommentarer

Str_replace til tilpasning af xms data

Jeg er ved at lave et Google Maps kort, hvor jeg henter dens markers og medfølgende info ud fra et xml dokument. Når jeg exporterer til xml er det sat op på en måde som Maps ikke kan læse det. Jeg har forsøgt at bruge str_replace for at tilpasse mit xml til Maps, dog uden held.

Min originale databasefil er på 260 arrays; dette er kun et udsnit.
Det eksporterede xml (database.xml) ser følgede ud:

<?xml version="1.0" encoding="iso-8859-1" ?>
<database>
    <user_database>
        <uid>1</uid>
        <navn>Graasten</navn>
    <lat>54.900000</lat>
    <lng>9.600000</lng>
    </user_database>
    <user_database>
        <uid>2</uid>
        <navn>Vanløse</navn>
    <lat>55.680000</lat>
    <lng>12.490000</lng>
    </user_database>
</database>


Og det xml, som jeg skal bruge ser sådan ud:

<?xml version="1.0" encoding="iso-8859-1" ?>
<markers>
    <marker
        uid="1"
        navn="Graasten"
        lat="54.900000"
        lng="9.600000"
    />
    <marker
        uid="2"
        navn="Vanløse"
        lat="55.680000"
        lng="12.490000"
    />
</markers>


Mit forsøg på str_replace ser følgende ud:

<?php
require("datatest.xml");
str_replace("<database>","<markers>","");
str_replace("<user_database>","<marker","");
str_replace("<uid>","uid=&quot;","");
str_replace("</uid>","&quot;","");
str_replace("<navn>","navn=&quot;","");
str_replace("</navn>","&quot;","");
str_replace("<lat>","lat=&quot;","");
str_replace("</lat>","&quot;","");
str_replace("<lng>","lng=&quot;","");
str_replace("</lng>","&quot;","");
str_replace("</user_database>","/>","");
str_replace("</database>","</markers>","");
?>

Det er kun str_replace("<database>","<markers>",""); og str_replace("</database>","</markers>",""); der fungerer.

Er der nogen der kan hjælpe mig med dette? Findes der evt en bedre måde at tilpasse dette xml på?

Mvh, Kaw
Avatar billede olebole Juniormester
05. januar 2009 - 21:18 #1
<ole>

Læg for det første mærke til, at du skal bruge utf-8 som tegnsæt. Du har fejl i dine specialtegn som f.eks. æ, ø og å  ;o)

At replace sig ud af problemerne er nok ikke løsningen. Brug i stedet XML-DOM:
    http://dk2.php.net/manual/en/book.domxml.php

/mvh
</bole>
Avatar billede kawaru Nybegynder
09. januar 2009 - 22:20 #2
Ok. Tak for svar.

Jeg har fundet dette xml-dom, der henter min information direkte fra databasen. Den skal vel bare tilrettes?

<?php 
require("phpsqlajax_dbinfo.php");

// Start XML file, create parent node

$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);

// Opens a connection to a MySQL server

$connection=mysql_connect (localhost, $username, $password);
if (!$connection) {  die('Not connected : ' . mysql_error());}

// Set the active MySQL database

$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mysql_error());
}

// Select all the rows in the markers table

$query = "SELECT * FROM markers WHERE 1";
$result = mysql_query($query);
if (!$result) { 
  die('Invalid query: ' . mysql_error());
}

header("Content-type: text/xml");

// Iterate through the rows, adding XML nodes for each

while ($row = @mysql_fetch_assoc($result)){ 
  // ADD TO XML DOCUMENT NODE 
  $node = $dom->createElement("marker"); 
  $newnode = $parnode->appendChild($node); 
  $newnode->setAttribute("name",$row['name']);
  $newnode->setAttribute("address", $row['address']); 
  $newnode->setAttribute("lat", $row['lat']); 
  $newnode->setAttribute("lng", $row['lng']); 
  $newnode->setAttribute("type", $row['type']);
}

echo $dom->saveXML();
?>


Den requirer phpsqlajax_dbinfo.php, som skal se følgende ud:
<?
$username="username";
$password="password";
$database="username-databaseName";
?>

Hvordan skal phpsqlajax_dbinfo.php's CMOD være for at man ikke kan "stjæle" mine database koder?

/Kaw
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