Доступ к @атрибуту из SimpleXML

У меня проблема с доступом к разделу @attribute моего объекта SimpleXML. Когда я var_dump весь объект, я получаю правильный вывод, а когда я var_dump остальная часть объекта (вложенные теги), я получаю правильный вывод, но когда я следую документам и var_dump $xml->OFFICE->{'@attributes'}, Я получаю пустой объект, несмотря на то, что первый var_dump ясно показывает, что есть атрибуты для вывода.

Кто-нибудь знает, что я делаю неправильно здесь/как я могу сделать эту работу?

Ответ 1

Вы можете получить атрибуты элемента XML, вызвав функцию attributes() в XML node. Затем вы можете var_dump возвращаемое значение функции.

Дополнительная информация на php.net http://php.net/simplexmlelement.attributes

Пример кода с этой страницы:

$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

Ответ 2

Попробуйте это

$xml->attributes()->Token

Ответ 3

$xml = <<<XML
<root>
<elem attrib="value" />
</root>
XML;

$sxml = simplexml_load_string($xml);
$attrs = $sxml->elem->attributes();
echo $attrs["attrib"]; //or just $sxml->elem["attrib"]

Используйте SimpleXMLElement::attributes.

Истина заключается в том, что обработчик SimpleXMLElement get_properties лежит много времени. Нет свойства с именем "@attributes", поэтому вы не можете сделать $sxml->elem->{"@attributes"}["attrib"].

Ответ 4

Я использовал так много раз для получения @attributes, как показано ниже, и это было немного дольше.

$att = $xml->attributes();
echo $att['field'];

Это должно быть проще, и вы можете сразу получить атрибуты следующего формата:

Стандартный способ - Атрибуты доступа к массиву (AAA)

$xml['field'];

Другие альтернативы:

Правый и быстрый формат

$xml->attributes()->{'field'};

Неверные форматы

$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];

Ответ 5

Вы можете просто сделать:

echo $xml['token'];

Ответ 6

Если вы ищете список этих атрибутов, XPath будет вашим другом

print_r($xml->xpath('@token'));

Ответ 7

К сожалению, у меня есть уникальная сборка (застрявшая с Gentoo на данный момент) PHP 5.5, и я обнаружил, что

 $xml->tagName['attribute']

было единственным решением, которое сработало. Я пробовал все вышеперечисленные методы Bora, включая формат "Right and Quick", и все они провалились.

Тот факт, что это самый простой формат, является плюсом, но мне не нравилось думать, что я был сумасшедшим, пробовав все форматы, о которых говорили другие.

Наслаждайтесь тем, что стоит (я упомянул уникальную сборку?).

Ответ 8

Это помогло мне преобразовать результат simplexml_load_file ($ file) в структуру JSON и декодировать его обратно:

$xml = simplexml_load_file("$token.xml");
$json = json_encode($xml);
$xml_fixed = json_decode($json);

$try1 = $xml->structure->{"@attributes"}['value'];
print_r($try1);

>> result: SimpleXMLElement Object
(
)

$try2 = $xml_fixed->structure->{"@attributes"}['value'];
print_r($try2);

>> result: stdClass Object
(
    [key] => value
)