我正在尝试解析以下xml,但是我的代码自动解析了每个部分的第一个标记,
$xml = simplexml_load_string($response);
foreach ($xml->person as $p) {
$p = $p->attributes()->name;
echo " ".$p. " ";
}
输出是Joe Ray Alex,但我需要它来显示列表中每个人的名字,所以它应该是Joe Jack Ray John Edward Alex。
<?xml version="1.0" encoding="utf-8"?>
<people>
<person name="Joe">
<person name="Jack">
</person>
</person>
<person name="Ray">
<person name="John">
<person name="Edward">
</person>
</person>
<person name="Alex">
</person>
</people>
还有其他选择而不是更改xml吗? 因为我收到了来自网络服务的响应的xml。
答案 0 :(得分:1)
修复您的XML
如果你真的想要打印内部元素数据,你应该创建一个递归函数:
function printNames($simpleXMLElement) {
// Print the name attribute of each top level element
foreach ($simpleXMLElement as $element) {
// Print this elements name.
$p = $simpleXMLElement->attributes()->name;
echo " ".$p." ";
// Send the inner elements to get their names printed
foreach ($simpleXMLElement->children() as $child) {
printNames($child);
}
}
}
$xml = simplexml_load_string($response);
printNames($xml);
答案 1 :(得分:0)
为什么不更正XML?
即
<people>
<person name="Joe" />
<person name="Jack" />
<person name="Ray" />
<person name="John" />
<person name="Edward" />
<person name="Alex" />
</people>
答案 2 :(得分:0)
鉴于您奇怪的XML结构,您必须查找并递归到您找到的任何person
元素,或者您需要生成所有person
元素的平面列表。
这是一个xpath方法:
$people = $xml->xpath('descendant::person');
foreach ($people as $person) {
echo $person['name'], "\n";
}