web-dev-qa-db-de.com

Zugriff auf @ attributes-Daten in SimpleXMLElement in PHP

Ich wollte nur damit beginnen, dass ich habe eine Menge der Fragen auf dieser Website zu diesem Problem gelesen habe, aber ich habe immer noch Schwierigkeiten, sie auf mein Szenario anzuwenden. Wenn mir jemand helfen könnte, wäre das großartig! :)

Ich versuche, Daten aus dem folgenden XML zu extrahieren:

$myXML = '<?xml version="1.0" encoding="UTF-8"?>
<products><product uri="https://192.168.110.201:9630/api/products/1807/" id="1807"    resource_type="current"><code>DEMO - MC700X/A</code><flags><inventoried>true</inventoried><editable_sell>false</editable_sell><master_model>false</master_model></flags><sell_price>0.00</sell_price><description>Apple MC700X/A Demo</description><inventory><available>7</available><reserved>0</reserved><coming_for_stock>2.0</coming_for_stock><coming_for_customer>0.0</coming_for_customer><warehouses>0</warehouses><total>7</total></inventory><product_photos/></product></products>';

Ich verwende SimpleXML, um es in eine PHP Variable (object?) Wie folgt zu setzen:

$xml = new SimpleXMLElement($myXML);

Wenn ich ein:

echo '<pre>';
print_r($xml);
echo '</pre>';

Ich bekomme folgendes zurück:

SimpleXMLElement Object
(
    [product] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [uri] => https://192.168.110.201:9630/api/products/1807/
                    [id] => 1807
                    [resource_type] => current
                )

            [code] => DEMO - MC700X/A
            [flags] => SimpleXMLElement Object
                (
                    [inventoried] => true
                    [editable_sell] => false
                    [master_model] => false
                )

            [sell_price] => 0.00
            [description] => Apple MC700X/A Demo
            [inventory] => SimpleXMLElement Object
                (
                    [available] => 7
                    [reserved] => 0
                    [coming_for_stock] => 2.0
                    [coming_for_customer] => 0.0
                    [warehouses] => 0
                    [total] => 7
                )

            [product_photos] => SimpleXMLElement Object
                (
                )

        )

)

Wenn ich jetzt versuche, programmgesteuert auf diese Daten zuzugreifen, funktioniert Folgendes in Ordnung:

// This returns the value as expected
echo '<pre>';
echo($xml->product->code);
echo '<br>';
echo($xml->product->sell_price);
echo '<br>';
echo($xml->product->inventory->available);
echo '<br>';
echo '</pre>';

Dies gibt zurück:

DEMO - MC700X/A
0.00
7

Ich muss jedoch in der Lage sein, auf das "id" -Tag im Basiselement "product" (d. H. Das @ attributes-Bit) zuzugreifen, kann es aber nicht lösen. Ich habe viel gelesen und kam zu dem Schluss, dass ich die Attribute () -Methode verwenden sollte, aber ich kann es nicht genau herausfinden.

Der Versuch hat nicht funktioniert:

echo '<pre>';
echo($xml->attributes());
echo '<br>';
echo '</pre>';

Es gibt einfach nichts zurück. Kann mir bitte jemand helfen? Ich möchte in der Lage sein, das "id" -Tag anzuzeigen. Das heißt, was ich erwarten würde:

echo $xml['product']['@attributes']['id'];

funktioniert offensichtlich auch nicht.

Danke !! John

24
John Cleary

Hast du versucht:

echo (string)$xml->product->attributes()->id;

Das sollte Ihnen Zugriff auf die Attribute geben.

Wenn Sie mehr als ein Produkt haben, kann es sein

echo (string)$xml->product[0]->attributes()->id;

Sie können auf die Attribute auch mit regulärer Array-Notation zugreifen, z.

$xml->product['id']; // instead of $xml->product->attributes()->id

Weitere Informationen finden Sie in Example # 5 aus den SimpleXML-Beispielen sowie in der Manpage zu SimpleXMLElement :: attributes () .

54
drew010
$array = (array)$obj;
$prop_id = $array['@attributes'];
0
邱威润