SimpleXMLオブジェクトの@attribute
セクションへのアクセスに問題があります。オブジェクト全体を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
以下のように@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'];
$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"]
を実行できません。
あなたはただすることができます:
echo $xml['token'];
これらの属性のリストを探している場合は、XPathがあなたの友達になります
print_r($xml->xpath('@token'));
残念ながら、私はPHP 5.5のユニークなビルド(現時点ではGentooにこだわっています)を持っています。
$xml->tagName['attribute']
働いた唯一のソリューションでした。 「Right&Quick」形式を含め、上記のBoraのすべての方法を試しましたが、すべて失敗しました。
これが最も簡単な形式であるという事実はプラスですが、他の人が機能していると言っているすべての形式を試してみるのは正気ではありませんでした。
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
)