2016-08-09 6 views
-2

Ich versuche, Werte aus einer XML-Datei zu erhalten, aber ich habe ein Problem. Einer der Tag-Namen beginnt mit "@". Ich bekomme also einen Fehler.Wie bekomme ich Werte von XML, die "@" am Anfang des Tag-Namens hat?

Das ist mein xml

object(SimpleXMLElement)#537 (1) { ["urun"]=> array(5225) { [0]=> object(SimpleXMLElement)#547 (1) { ["@attributes"]=> array(7) { ["id"]=> string(4) "2972" ["secenekid"]=> string(1) "4" ["grup"]=> string(4) "YAŞ" ["ozellik"]=> string(1) "1" ["fiyat"]=> string(1) "0" ["agirlik"]=> string(1) "0" ["Stok"]=> string(1) "0" } } [1]=> object(SimpleXMLElement)#548 (1) { ["@attributes"]=> array(7) { ["id"]=> string(4) "2972" ["secenekid"]=> string(1) "5" ["grup"]=> string(4) "YAŞ" ["ozellik"]=> string(1) "2" ["fiyat"]=> string(1) "0" ["agirlik"]=> string(1) "0" ["Stok"]=> string(1) "0" } } 

ich so zu bekommen bin versucht.

$url = "http://xx.com"; 
$xml = simplexml_load_file($url); 

foreach($xml->urun->@attributes as $val) { 
echo $val->id; 
} 

und das ist der Fehler, was ich sehe

syntax error, unexpected '@', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' 

so was soll ich für Sie wissen, dass zu lösen?

Danke.

+1

'foreach ($ xml-> urun-> Attribute() als Schlüssel $ => $ val)' – splash58

+0

Wenn Ihr Dokument hat wirklich Tag-Namen beginnend mit '@', dann Es ist kein XML. – kjhughes

+0

Verwechseln Sie nicht SimpleXMLs Debug-Ausgabe für die tatsächlichen Daten - hier sind große Unterschiede. – ThW

Antwort

-3

verwenden könnte ich finde es am einfachsten zu konvertieren xml zu Arrays über JSON encode/decode, da Array-Schlüssel '@' ohne Probleme enthalten können und Arrays einfach zu durchlaufen sind:

$xml = simplexml_load_file($url); 
$json = json_encode($xml); 
$data = json_decode($json,true); 

Jetzt haben Sie ein Array. Verwenden Sie print_r, um seine Form auf dem Bildschirm zu sehen. Um den Zugriff Attribute würden Sie tun:

echo $data['@attributes']['Name'] 
+0

All diese Kodierung und Dekodierung zu tun, nur um eine etwas andere Zugriffssyntax zu bekommen, scheint mir ein Overkill zu sein. – ShiraNai7

+0

@ ShiraNai7 eigentlich stimme ich dir zu :-) Es wäre übertrieben, wenn es nur für diesen Zweck wäre. Ich gab meine Gründe einschließlich "Arrays sind leicht zu durchqueren". Ich habe es einfach nicht weiter ausgeführt, da Sie wahrscheinlich heruntergeregelt haben, lassen Sie mich etwas näher ausführen: Indem ich es so mache, kann ich arithmetische Funktionen auf den Daten ausführen, ich kann 'array_map',' array_filter', 'array_merge' ... ich kann es zu anderen Arrays hinzufügen, kann ich 'array_intersect' zu schnell mit anderen XML-Daten vergleichen ... PHP ist nur ein Biest mit Arrays so ... – BeetleJuice

+0

Es könnte nützlich sein, wenn eine vollständige Konvertierung in ein mehrdimensionales Array erforderlich ist es fühlt sich immer noch schmutzig an :) – ShiraNai7

Verwandte Themen