Estou tendo problemas para acessar a @attribute
seção do meu objeto SimpleXML. Quando eu var_dump
obtenho o objeto inteiro, obtenho a saída correta, e quando obtenho o var_dump
resto do objeto (as tags aninhadas), obtenho a saída correta, mas quando sigo os documentos e var_dump
$xml->OFFICE->{'@attributes'}
, obtenho um objeto vazio, apesar do fato de que o primeiro var_dump
mostra claramente que existem atributos para a saída.
Alguém sabe o que estou fazendo de errado aqui / como posso fazer isso funcionar?
Respostas:
Você pode obter os atributos de um elemento XML chamando a função attribute () em um nó XML. Você pode então var_dump o valor de retorno da função.
Mais informações em php.net http://php.net/simplexmlelement.attributes
Exemplo de código dessa página:
fonte
$b
será umSimpleXMLElement
objeto assimprint_r
evar_dump
lhe dará coisas estranhas. Você pode lançá-lo como uma corda (ou o que quiser) para contornar isso.Tente isto
fonte
attributes()
no objeto correspondente a tag certa em seu XML. Como se você tivesse,<root><tag attr="a">b</tag></root>
então você precisa fazer$xml->tag->attributes()->attr
para acessá-lo.Eu usei tantas vezes antes para ficar
@attributes
como embaixo e foi um pouco mais longo.Deve ser mais fácil e você pode obter atributos seguindo o formato apenas de uma vez:
Forma padrão - Atributos de acesso a matriz (AAA)
Outras alternativas são:
Formato correto e rápido
Formatos errados
fonte
$xml->attributes()->{'field'}
,$xml->attributes()->field
, e$f='field'; $xml->attributes()->$f;
são os mesmos. Não veja nenhuma razão pela qual um está no formato correto e outro está errado.Use
SimpleXMLElement::attributes
.A verdade é que o
get_properties
manipulador SimpleXMLElement é um grande momento. Não há propriedade chamada "@attributes", então você não pode fazer isso$sxml->elem->{"@attributes"}["attrib"]
.fonte
get_properties
manipulador). Muito interessante.Você pode apenas fazer:
fonte
Se você estiver procurando por uma lista desses atributos, XPath será seu amigo
fonte
Isso me ajudou a converter o resultado de simplexml_load_file ($ file) em uma estrutura JSON e decodificá-lo de volta:
fonte
Infelizmente eu tenho uma compilação única (presa no Gentoo por enquanto) do PHP 5.5, e o que eu descobri foi que
foi a única solução que funcionou. Tentei todos os métodos do Bora acima, incluindo o formato 'Certo e Rápido', e todos falharam.
O fato de este ser o formato mais fácil é uma vantagem, mas não gostei de pensar que estava louco tentando todos os formatos que os outros diziam que funcionavam.
Njoy pelo que vale (eu mencionei construção única?)
fonte