Доступ к @ attribute из SimpleXML
у меня возникли проблемы с доступом к @attribute раздел моего объекта SimpleXML. Когда Я var_dump весь объект, я получаю правильный вывод, и когда я var_dump остальная часть объекта (вложенные теги), я получаю правильный вывод, но когда я следую за docs и var_dump$xml->OFFICE->{'@attributes'}, Я получаю пустой объект, несмотря на то, что первый var_dump четко показывает, что есть атрибуты для вывода.
кто-нибудь знает что я делаю неправильно и как я могу сделать эту работу?
8 ответов:
вы можете получить атрибуты XML-элемента, вызвав функцию attributes() на XML-узле. Затем вы можете 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"; }
$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"].
я раньше так много раз для получения
@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'];
к сожалению, у меня есть уникальная сборка (застрявшая с Gentoo на данный момент) PHP 5.5, и я обнаружил, что
$xml->tagName['attribute']было единственным решением, которое сработало. Я попробовал все методы Bora выше, в том числе формат "Right & Quick", и все они потерпели неудачу.
тот факт, что это самый простой формат, является плюсом, но мне не нравилось думать, что я был сумасшедшим, пытаясь использовать все форматы, о которых говорили другие.
Njoy для чего его стоит (я уже упоминал уникальная сборка?).
это помогло мне преобразовать результат 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 )
Comments