PHP ERLEDIGT ... XML vertauscht ...

mydoys.de

Well-known member
ID: 84968
L
20 April 2006
2.749
125
Hey... Ich habe folgendes Problem ...

Ich lasse mir Infos mit Hilfe von XML anzeigen sieht derzeit so aus :

Code:
<1497958087>disappear_time<564662302>eid<51.203236>latitude<14.462181>longitude<166>id

Soll aber eigentlich so aussehen

<markers>
<marker id="564662302" name="166" lat="51.203236" lng="14.462181" type="restaurant"/>
</markers>

Kann man das irgendwie umstellen das es klappt ?


PHP:
$xml = new SimpleXMLElement('<markers />');
array_walk_recursive($content, array($xml, 'addChild'));
$ausgabe =$xml->asXML();


$content ist json string
 
Zuletzt bearbeitet:
Wie sieht denn das $content-Array aus? Wenn Du das einfach so in "addChild()" schubst, kann doch auch nie aus "latitude" "lat" werden...
 
Wie sieht denn das $content-Array aus? Wenn Du das einfach so in "addChild()" schubst, kann doch auch nie aus "latitude" "lat" werden...

HTML:
{"figuren":[{"disappear_time":1497289833,"eid":420604500,"latitude":51.005062,"longitude":13.788081,"figur_id":134},{"disappear_time":1497290086,"eid":420650720,"latitude":50.991810,"longitude":13.786435,"figur_id":157},{"disappear_time":1497289827,"eid":420669229,"latitude":51.078472,"longitude":13.690406,"figur_id":147},{"disappear_time":1497290826,"eid":420766865,"latitude":51.166668,"longitude":13.678964,"figur_id":147},{"disappear_time":1497291157,"eid":420822384,"latitude":51.020481,"longitude":13.785569,"figur_id":147}]}
 
Dann sollte das hier Dir eigentlich weiterhelfen:

PHP:
<?php
$xml = new SimpleXMLElement('<markers/>');
foreach ($array['figuren'] as $row) {
    $child = $xml->addChild('marker');

    $child->addAttribute('name', 'value');
    // ...
}
echo $xml->asXML();
 
Dann sollte das hier Dir eigentlich weiterhelfen:

....

Da bleibt es leer :(



["figuren"]=>
array(1698) {
[0]=>
array(5) {
["disappear_time"]=>
int(1498641031)
["eid"]=>
int(70807689)
["latitude"]=>
float(51.186707)
["longitude"]=>
float(14.457597)
["pokemon_id"]=>
int(46)
}
[1]=>
array(5) {
["disappear_time"]=>
int(1498640811)
["eid"]=>
int(70808022)
["latitude"]=>
float(51.065971)
["longitude"]=>
float(13.822653)
["pokemon_id"]=>
int(163)
}
[2]=>
array(5) {
["disappear_time"]=>
int(1498640951)
["eid"]=>
int(70808386)
["latitude"]=>
float(51.065552)
["longitude"]=>
float(13.823375)
["pokemon_id"]=>
int(29)
}


PHP:
$xml = new SimpleXMLElement('<markers />');
foreach ($array['figuren'] as $row) {
    $child = $xml->addChild('marker');

    $child->addAttribute('disappear_time', 'value');
	$child->addAttribute('latitude', 'value');
  
}
echo $xml->asXML();

oder mache ich was falsch ?
 
Wird das Array denn korrekt durchlaufen? Und dass Du dort die Werte aus $row statt dem festen Wert value einsetzen musst, hatte ich jetzt mal als gegeben vorausgesetzt.

Das Skript hier:

PHP:
<?php
$array['figuren'] = [['a' => 1, 'b' => 2]];

$xml = new SimpleXMLElement('<markers />');
foreach ($array['figuren'] as $row) {
    $child = $xml->addChild('marker');

    $child->addAttribute('disappear_time', $row['a']);
    $child->addAttribute('latitude', $row['b']);

}
echo $xml->asXML();

erzeugt bei mir dieses XML:

Code:
<markers><marker disappear_time="1" latitude="2"/></markers>
 
Wird das Array denn korrekt durchlaufen? Und dass Du dort die Werte aus $row statt dem festen Wert value einsetzen musst, hatte ich jetzt mal als gegeben vorausgesetzt.

Das Skript hier:

PHP:
............

erzeugt bei mir dieses XML:

Code:
<markers><marker disappear_time="1" latitude="2"/></markers>

Komisch, das macht es bei mir auch ...
Aber warum klappt es dann mit dem anderen nicht ...

Hier mal der Ganze code :



PHP:
<?php

$content 	= @file_get_contents("$SEITE");
$content 	=json_decode($content, true);






$xml = new SimpleXMLElement('<markers />');
foreach ($array['figuren'] as $row) {
    $child = $xml->addChild('marker');

    $child->addAttribute('disappear_time', $row['a']);
    $child->addAttribute('latitude', $row['b']);

}
echo $xml->asXML();


$SEITE = ist die Adresse wo die das hier herkommt:

Code:
{"figuren":[{"disappear_time":1498674329,"eid":75489693,"latitude":50.285469,"longitude":11.910858,"id":246},{"disappear_time":1498674672,"eid":75490341,"latitude":53.150509,"longitude":11.244505,"id":147},{"disappear_time":1498674621,"eid":75490462,"latitude":52.199211,"longitude":8.777927,"id":147},{"disappear_time":1498674868,"eid":75490573,"latitude":49.460598,"longitude":6.633313,"id":143},{"disappear_time":1498673284,"eid":75490706,"latitude":49.966843,"longitude":8.578279,"id":147}]}


Um zuverstehe was es werden soll :

HTML:
<?xml version="1.0" encoding="UTF-8"?>
<markers>
    <marker id="1" name="246" lat="50.285469" lng="11.910858" time="1498674329" type="restaurant" />
    <marker id="2" name="147" lat="53.150509" lng="11.244505" time="1498674672" type="restaurant" />
    <marker id="3" name="147"  lat="52.199211" lng="8.777927" time="1498674621" type="bar" />
    <marker id="4" name="143"  lat="49.460598" lng="6.633313" time="1498674868" type="bar" />
    <marker id="5" name="147"  lat="49.966843" lng="8.578279" time="1498673284" type="restaurant" />
 </markers>
 
1. Du liest deine Quelle in eine Variable $content und verarbeitest danach ein $array['figuren']
2. Du wertest aus der $row ein Element "a" und ein Element "b" aus, deine Quelle würde aber - wenn man sie korrekt einliest - die Elemente "disappear_time", "eid", etc. liefern

Beispiel abschreiben hilft eben nicht. Lesen, verstehen und auf den Anwendungsfall umsetzen wäre jetzt gefragt.
 
1. Du liest deine Quelle in eine Variable $content und verarbeitest danach ein $array['figuren']
2. Du wertest aus der $row ein Element "a" und ein Element "b" aus, deine Quelle würde aber - wenn man sie korrekt einliest - die Elemente "disappear_time", "eid", etc. liefern

Beispiel abschreiben hilft eben nicht. Lesen, verstehen und auf den Anwendungsfall umsetzen wäre jetzt gefragt.


Ok, aber auch wenn ich es anpasse bleibt es leer...

PHP:
<?xml version="1.0"?>
<markers><marker disappear_time="" latitude=""/></markers>


PHP:
$content 	= @file_get_contents("$SEITE");
$content 	=json_decode($content, true);


$xml = new SimpleXMLElement('<markers />');
foreach ($content as $row) {
    $child = $xml->addChild('marker');

    $child->addAttribute('disappear_time', $row['disappear_time']);
    $child->addAttribute('latitude', $row['latitude']);

}
echo $xml->asXML();
 
fast gut... wenn du dir $content mal nach dem Einlesen per var_dump ausgeben lässt, stellst du fest, dass das ein Array bestehend aus einem Element namens "figuren" ist. Dieses Element ist seinerseits wieder ein Array bestehend aus fünf Elementen. Und dann musst du dir überlegen, worauf du denn das foreach anwenden willst.
 
fast gut... wenn du dir $content mal nach dem Einlesen per var_dump ausgeben lässt, stellst du fest, dass das ein Array bestehend aus einem Element namens "figuren" ist. Dieses Element ist seinerseits wieder ein Array bestehend aus fünf Elementen. Und dann musst du dir überlegen, worauf du denn das foreach anwenden willst.

Danke! Das hätte ich übersehen !


Jetzt die Letzte Frage damit es dargstellt wird wie ein XML datei, damit die Daten von meiner Karte eingelesen werden können was muss ich da tun ?
Das weiß ich leider garnicht..


Edit:
habe es mit
RewriteEngine on
RewriteRule test.xml(.*)$ test.php
versucht klappt nicht


ok... gefunden
header("Content-type: text/xml;");
 
Zuletzt bearbeitet:
fast gut... wenn du dir $content mal nach dem Einlesen per var_dump ausgeben lässt, stellst du fest, dass das ein Array bestehend aus einem Element namens "figuren" ist. Dieses Element ist seinerseits wieder ein Array bestehend aus fünf Elementen. Und dann musst du dir überlegen, worauf du denn das foreach anwenden willst.
Das hätte ich übersehen!