如何访问此XML中的元素

时间:2016-07-17 20:18:13

标签: php arrays xml

我不再是编码员了,上次我编写的C语言是在12年前。

我需要访问此XML中的FirstName:

<Customer>
<data_0>
     <FirstName>Michael</FirstName>
</data_0>
<data_1>
    <FirstName>Jack</FirstName>
</data_1>
<data_2>
    <FirstName>Luke</FirstName>
</data_2>
</Customer>

奇怪的是,我的API调用返回的XML不是常规数组,而是显示在data_0,data_1,data_2等中。

我想知道在每个数据集中访问FirstName会有什么样的代码?

我希望以下代码能够正常运行但不会:

$xml = new SimpleXMLElement($results);

for ($i = 0; $i < 5; $i++)
{
$data="data_".$i;

echo $xml->Customer[0]->$data->FirstName;

}

提前致谢。

2 个答案:

答案 0 :(得分:1)

替换

echo $xml->Customer[0]->$data->FirstName;

echo $xml->$data->FirstName;

在行动here中查看。

如果您print_r($xml),您会看到这是结构:

SimpleXMLElement Object
(
    [data_0] => SimpleXMLElement Object
        (
            [FirstName] => Michael
        )

    [data_1] => SimpleXMLElement Object
        (
            [FirstName] => Jack
        )

    [data_2] => SimpleXMLElement Object
        (
            [FirstName] => Luke
        )

)

所以你已经掌握了每个data_X,你只需要得到它们。

您还可以使用foreach循环元素,看看:

foreach($xml as $k => $v){
    echo "[$k]: " . $v->FirstName . '<br>';
}

输出:

[data_0]: Michael
[data_1]: Jack
[data_2]: Luke

答案 1 :(得分:1)

使用SimpleXMLElement::xpath函数的简单解决方案:

$xml = simplexml_load_string($results);
// "//../FirstName" - relative path to 'FirstName' items
foreach ($xml->xpath("//../FirstName") as $name) {
    echo (string) $name . PHP_EOL;
}

输出:

Michael
Jack
Luke