У меня проблема с доступом к разделу @attribute моего объекта SimpleXML. Когда я var_dump
весь объект, я получаю правильный вывод, и когда я var_dump
остальную часть объекта (вложенные теги), я получаю правильный вывод, но когда я следую документам и var_dump
$xml->OFFICE->{'@attributes'}
, я получаю пустой объект, несмотря на то, что первый var_dump
ясно показывает, что есть атрибуты для вывода.
Кто-нибудь знает, что я делаю неправильно здесь / как я могу это сделать?
Вы можете получить атрибуты элемента 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->attributes()->Token
$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
.
Правда в том, что обработчик get_properties get_properties
лежит много времени. Нет свойства с именем «@attributes», поэтому вы не можете использовать $sxml->elem->{"@attributes"}["attrib"]
.
Я использовал так много раз, чтобы получить @attributes
как @attributes
ниже, и это было немного дольше.
$att = $xml->attributes(); echo $att['field'];
Это должно быть проще, и вы можете получить атрибуты в следующем формате только сразу:
$xml['field'];
Другие альтернативы:
$xml->attributes()->{'field'};
$xml->attributes()->field; $xml->{"@attributes"}->field; $xml->attributes('field'); $xml->attributes()['field']; $xml->attributes->['field'];
Вы можете просто сделать:
echo $xml['token'];
Если вы ищете список этих атрибутов, XPath будет вашим другом
print_r($xml->xpath('@token'));
К сожалению, у меня есть уникальная сборка (застрявшая с Gentoo на данный момент) PHP 5.5, и я обнаружил, что
$xml->tagName['attribute']
было единственным решением, которое сработало. Я пробовал все методы Боры выше, включая формат «Правильный и быстрый», и все они потерпели неудачу.
Тот факт, что это самый простой формат, является плюсом, но мне не нравилось думать, что я безумно пытался использовать все форматы, о которых говорили другие.
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 )