Доступ к @ attribute из SimpleXML



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



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

603   8  

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->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.

правда, 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'];

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

echo $xml['token'];

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

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

к сожалению, у меня есть уникальная сборка (застрявшая с 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

    Ничего не найдено.