在PHP中遍历XML结构


Traversing XML structure in PHP

如何读取数组的此对象中的状态

当我时,我得到了这个结果

$xml   = simplexml_load_string($xml_string);
display_output($xml->country[0]);

结果:

SimpleXMLElement::__set_state(array(
   '@attributes' => 
   array (
    'name' => 'Afghanistan',
),
'state' => 
array (
0 => 'Badakhshan',
1 => 'Badghis',
2 => 'Baghlan',
3 => 'Balkh',
4 => 'Bamian',
5 => 'Farah',
6 => 'Faryab',
7 => 'Ghazni',
8 => 'Ghowr',
9 => 'Helmand',
10 => 'Herat',
11 => 'Jowzjan',
12 => 'Kabol',
13 => 'Kandahar',
14 => 'Kapisa',
15 => 'Konar',
16 => 'Kondoz',
17 => 'Laghman',
18 => 'Lowgar',
19 => 'Nangarhar',
20 => 'Nimruz',
21 => 'Oruzgan',
22 => 'Paktia',
23 => 'Paktika',
24 => 'Parvan',
25 => 'Samangan',
26 => 'Sar-e Pol',
27 => 'Takhar',
28 => 'Vardak',
29 => 'Zabol',
),
))

我想得到州政府,我该怎么办?我试过了,不幸的是它不起作用。

$a = $xml->country[0]->state[0];

*下面是xml:

<?xml version="1.0" encoding="utf-8"?>
<countries>
 <country name="Afghanistan">
    <state>Badakhshan</state>
    <state>Badghis</state>
    <state>Baghlan</state>
    <state>Balkh</state>
    <state>Zabol</state>
  </country>
</countries>

更新,找到答案

            $xml   = simplexml_load_string($xml_string);
            $country = array();
            $state = array();
            for($x=0;$x<count($xml);$x++)
            {
                $country[] = (string)$xml->country[$x]->attributes()->name;
                if(isset($xml->country[$x]->state))
                {
                    for($y=0;$y<count($xml->country[$x]->state);$y++)
                    {
                        $state[$x][] = (string)$xml->country[$x]->state[$y];
                    }
                }
            }
            return array($country,$state);

我认为您应该使用xpath来查找country元素上的属性"Afghanish",因为您知道这是您要获取数据的国家。

$afghanistan = $xml->xpath("//country[@name='Afghanistan']");
$afghan_states = $afghanistan->state;
$first_state = $afghan_states[0];

或者,如果你不需要国家级的信息,你可以使用一个更具体的xpath选择器:

$afghan_states = $xml->xpath("//country[@name='Afghanistan']/state");
$first_state = $afghan_states[0];

即使XML中的country元素顺序发生了更改,这也会使代码正常工作。