1
<info>
<form tableid="1">
<town_id>
<option value="5102">Moscow</option>
<option value="2587">London</option>
<option value="717">Madrid</option>
<option value="2513">Paris</option>
<option value="5071">Berlin</option>
</town_id>
</form>
</info>
私はそのようなXMLを持っており、simplexml_load_stringを通して解析したいと考えています。関数はそのようなオブジェクトを返します。PHPでsimplexml_load_stringを使用してXMLを解析する
SimpleXMLElement Object
(
[form] => SimpleXMLElement Object
(
[@attributes] => Array
(
[tableid] => 1
)
[town_id] => SimpleXMLElement Object
(
[option] => Array
(
[0] => Moscow
[1] => London
[2] => Madrid
[3] => Paris
[4] => Berlin
)
)
)
)
私は町のオプションから2番目の属性値を持っていません。どうすれば入手できますか? 私のコード:
/** @var SimpleXMLElement $xml */
$xml = simplexml_load_string($data);
if (! is_object($xml)) return FALSE;
print_r($xml);
foreach($xml as $record){
$attr = $record->attributes();
$table_id = (int)$attr['tableid'];
foreach($record as $key => $value){
//$table_data[$table_id][$key][] = $value['option'];
print_r($value->attributes());
print_r($value['option']->attributes());
}
}
$value
はSimpleXMLElement
オブジェクトですが、$value->attributes()
と$value['option]->attributes()
復帰空の配列。
@WebDev、あなたは 'フォーム/ * [オプション]'との例を読んだことがありますか? '*'は 'option'タグを持つ_all_要素を指します。要素名はまったく知る必要はありません。あなたは '// * [option]'を使うことさえあります。後者の場合、 'option'についてのみ知る必要があります。 –
ああ、申し訳ありません。私はスイッチと列挙のすべてのフィールドで混乱していた。私はスイッチでラベルを設定することに気付かなかった。 – Dev
もう1つ質問:tableid = 1のブロックフォームからのみオプションを取得するにはどうすればよいですか? '$ items-> xpath( 'form [1]/* [option]');または$ items-> xpath( 'form [2]/* [option]'); ' – Dev