Autor Zpráva
ladinek111
Profil
Dobrý den.

Potřeboval bych poradit se strukturováním XML pomocí PHP. Pomocí PHP se připojím do MySQL databáze a parsuji data do XML.
Data bych potřeboval strukturovat nějak takhle:
<polygons>
- <polygon name="Polygon21" address="Ostrava" type="type" colour="#ff0000">
  <point lat="49.837" lng="17.992" /> 
  <point lat="49.777" lng="18.092" /> 
  <point lat="49.879" lng="18.198" /> 
  <point lat="49.841" lng="18.073" /> 
  <point lat="49.837" lng="17.992" /> 
  </polygon>
  </polygons>


bohužel z databáze to načítám v tomhle formátu (ukládám dvojice čísel za sebou, oddělené čárkou). Zkoušel jsem na doporučení hrát si s funkcí explode ale to asi nebyla správna cesta:
 <polygons> 
  <polygon name="Polygon21" address="Ostrava" latlng="49.837 17.992,49.777 18.092,49.879 18.198,49.841 18.073,49.837 17.992" type="poly"/> 
  </polygons>

Děkuji za pomoc
Chro
Profil
Možná takhle, podle lamy:
$data = explode('latlng="', $xml);
$souradnice = explode('"', $data[1]);
$souradnice_pole = explode(",", $souradnice[0]);
$pocet = count($souradnice_pole);
for ($i = 0; $i < $pocet; ++$i)
{
list($lat, $lng) = explode(" ", $souradnice_pole[$i]);
$konvert_xml.= '<point lat="'.$lat.'" lng="'.$lng.'" />'."\n";
}
$novy_xml = $data[0].'type ="type" colour="#ff0000">'.
"\n".$konvert_xml.'</polygon>'."\n".'</polygons>';
echo $novy_xml;
Chro
Profil
Omlouvám se, chyba, na stránku se to vypíše přes echo '<xmp>'.$novy_xml.'</xmp>';
ladinek111
Profil
Chro:
Děkuji za příklad. Myslím že chápu o co přesně jde v tom skriptu ale pořád mi to nejde implementovat :-((
V podstatě z databáze dostávám množství záznamu strukturovaných tak jak jsou v tom prvním příspěvku. Všechno běží, bohužel u té funkce explode nejsem schopný ji upravit aby fungovala a vypisovala mi ty latlng v cyklu pod sebe. Budu moc vděčný za pomoc.
header("Content-type: text/xml");
// Start XML file, echo parent node
echo '<polygons>';
// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  // ADD TO XML DOCUMENT NODE
  echo '<polygon ';
  echo 'name="' . parseToXML($row['name']) . '" ';
  echo 'address="' . parseToXML($row['address']) . '" ';
  echo 'type="' . parseToXML($row['type']) . '" ';
  //echo 'latlng="' . parseToXML ($row['Glatlng']) . '" ';
    $data = explode('latlng="', $row['Glatlng']); //nevím jestli nenačítám špatně pouze ten atribut Glatlng z db. ještě mně napadlo nejdřív surově vyexportovat ten xml a pak se na něj odkázat tak jak jste popsal Vy ($xml).
    $souradnice = explode('"', $data[1]);
    $souradnice_pole = explode(",", $souradnice[0]); 
    $pocet = count($souradnice_pole);
      for ($i = 0; $i < $pocet; ++$i)
        {
          list($lat, $lng) = explode(" ", $souradnice_pole[$i]);
          echo '<point lat="'.$lat.'" lng="'.$lng.'" />'."\n";        
        }
  echo '/>';
}
// End XML file
echo '</polygons>';
larryx
Profil
skus toto:
header("Content-type: text/xml");
echo '<polygons>';
while ($row = @mysql_fetch_assoc($result)){
  
  echo "\t".'<polygon ';
  echo 'name="' . parseToXML($row['name']) . '" ';
  echo 'address="' . parseToXML($row['address']) . '" ';
  echo 'type="' . parseToXML($row['type']) . '" ';
  echo '>'."\n";
  $suradnice= explode(",", $row['Glatlng']); 
  foreach($suradnice as $val){
       list($lat, $lng) = explode(" ", $val);
       echo "\t\t".'<point lat="'.$lat.'" lng="'.$lng.'" />'."\n";        
  }
  echo "\t".'</polygon>'."\n";  
}
echo '</polygons>';


výsledok:
<polygons> 
	<polygon name="lolko" address="adresapekna" type="typdaky" > 
		<point lat="49.837" lng="17.992" /> 
		<point lat="49.777" lng="18.092" /> 
		<point lat="49.879" lng="18.198" /> 
		<point lat="49.841" lng="18.073" /> 
		<point lat="49.837" lng="17.992" /> 
	</polygon> 
</polygons>
ladinek111
Profil
larryx:
Děkuji. Všechno perfektně běží :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0