Отсутствуют атрибуты SimpleXML php

У меня есть следующий XML-документ здесь: Edit: (см. Ниже пример)

Я использую php / SimpleXML, чтобы скрыть его до объекта, чтобы его прочитать:

$xmlContent = file_get_contents($path . '/test.xml'); $tablesRaw = new SimpleXMLElement($xmlContent); echo '<pre>'; print_r($tablesRaw); echo '</pre>'; 

Когда я печатаю_r, я вижу атрибуты для поля, но атрибуты для допустимого значения не отображаются. Вот пример необработанного xml (мне нужен атрибут value):

 <acceptable-value value="0"> Unknown </acceptable-value> 

Это то, что я вижу, когда print_r:

 [acceptable-values] => SimpleXMLElement Object ( [acceptable-value] => Array ( [0] => Unknown [1] => Invalid [2] => Deleted [3] => Valid/Good [4] => Inactive ) ) 

Любые подсказки, почему атрибуты не отображаются? Заранее спасибо.

EDIT: запрос для некоторых из xml:

 <field name="Address1Type" type="String"/> <field name="Address2Street1" type="String"/> <field name="Address2Street2" type="String"/> <field name="Address2Type" type="String"/> <field name="Address3Street1" type="String"/> <field name="Status" type="Integer" access="R"> <acceptable-values> <acceptable-value value="0"> Unknown </acceptable-value> <acceptable-value value="1"> Invalid </acceptable-value> <acceptable-value value="2"> Deleted </acceptable-value> <acceptable-value value="3"> Valid/Good </acceptable-value> <acceptable-value value="4"> Inactive </acceptable-value> </acceptable-values> </field> 

Solutions Collecting From Web of "Отсутствуют атрибуты SimpleXML php"

Простой ответ здесь заключается не в использовании print_r() с объектами SimpleXML. Поскольку они являются обертками вокруг данных, отличных от PHP, такие функции, которые обычно отображают «весь» объект, на самом деле не отражают то, что вы смотрите.

Способ доступа к атрибуту с SimpleXML заключается в использовании имени атрибута, как если бы это был ключ массива ( $node['attribute'] ); это не означает, что есть какой-то массив с этим ключом, это переопределение функции-вызова.

Если вы хотите понять, на каких узлах вы смотрите при написании кода SimpleXML, проверьте эту simplexml_dump() которую я написал (приветствуется обратная связь).

Во-первых, вы должны получить объект SimpleXMLElement. В этом случае:

 $xmlContent = file_get_contents($path . '/test.xml'); $tablesRaw = new SimpleXMLElement($xmlContent); $elements = $tablesRaw->table[22]->fields->field[31]->{'acceptable-values'}->children(); 

Теперь вы можете перебирать каждый объект acceptable-value и использовать метод attributes() :

 foreach($elements as $element) { echo $element->attributes()->value . " "; echo trim($element[0]) . "\n"; } 

С вашим XML, который будет печатать:

 0 Unknown 1 Invalid 2 Deleted 3 Valid/Good 4 Inactive 

Он не полагается на индекс массива, потому что вызов attributes() получает фактические атрибуты элемента. И ->value получает атрибут с именем «значение».