Доступ к @атрибуту из 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
)