Intereting Posts
в php5, хотите отправить электронную почту в другом процессе Что касается for (), зачем использовать i ++, а не ++ i? Что такое файлы .tpl? php, веб-дизайн cookie исчезает, когда я меняю страницу Функция множественного обновления PHP не обновляется и получает первую строку пустым PHP – Что такое Warning: strpos () : пустой разделитель в среднем? Что означает недопустимый код результата 70007? Как это исправить? простая оценка php Dollar $ в строковых вопросах Просмотр папки PHP на окнах Подсчитайте количество страниц в PDF только в PHP Regex PHP – автоматическое определение YouTube, изображений и «регулярных» ссылок Безопасный вход в PHP Как данные POST как индексированный массив массивов (без указания индексов) MySQL / SQL извлекает первые 40 символов текстового поля? Есть ли причина, по которой мне нужно использовать stripslashes для представленных пользователем данных?

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

У меня проблема с доступом к разделу @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']; 

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

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

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