Доступ к данным @attributes в SimpleXMLElement в PHP

Просто хотел начать с того, что я прочитал много вопросов на этом сайте об этой точной проблеме, но я все еще пытаюсь применить ее к моему сценарию. Если бы кто-то мог мне помочь, это было бы здорово! 🙂

Я пытаюсь извлечь данные из следующего XML:

$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>'; 

Я использую SimpleXML, чтобы поместить его в переменную PHP (объект?) Следующим образом:

 $xml = new SimpleXMLElement($myXML); 

Если я сделаю:

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

Я возвращаю следующее:

 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 ( ) ) ) 

Теперь, когда я пытаюсь получить доступ к этим данным программно, следующее работает нормально:

 // 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>'; 

Это возвращает:

 DEMO - MC700X/A 0.00 7 

Но мне нужно иметь доступ к тегу id в базовом элементе «product» (т. Е. Бит @attributes), но не может его обработать. Я читал много и понял, что должен использовать метод attributes (), но я не могу точно его обработать.

Попытка этого не сработала:

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

Он просто ничего не возвращает. Может кто-нибудь, пожалуйста, помогите мне? Я хочу иметь возможность отображать тег «id» .. то есть то, что я ожидал бы:

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

очевидно, тоже не работает.

Благодаря!! Джон

Solutions Collecting From Web of "Доступ к данным @attributes в SimpleXMLElement в PHP"

Ты пробовал:

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

Это должно дать вам доступ к атрибутам.

Если у вас более 1 продукта, это может быть

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

Вы также можете получить доступ к атрибутам, используя регулярные обозначения массива, такие как:

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

Для получения дополнительной информации см. Пример № 5 из примеров SimpleXML, а также страницу руководства по SimpleXMLElement :: attributes () .

 $array = (array)$obj; $prop_id = $array['@attributes'];