Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用simplexml解析xml?_Php_Simplexml - Fatal编程技术网

Php 如何使用simplexml解析xml?

Php 如何使用simplexml解析xml?,php,simplexml,Php,Simplexml,我试图解析以下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 Ale

我试图解析以下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,还有其他选择吗?
因为我从web服务接收xml作为响应。

为什么不更正xml

i、 e


  • 修复您的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);
    

  • 考虑到奇怪的XML结构,您要么必须查找并递归到找到的任何
    person
    元素中,要么需要生成所有
    person
    元素的平面列表

    下面是一种xpath方法:

    $people = $xml->xpath('descendant::person');
    
    foreach ($people as $person) {
        echo $person['name'], "\n";
    }
    

    您的xml无效。另外,您确定这是您应该使用的结构吗?嵌套(没有任何上下文)似乎不寻常。您至少缺少一个结束标记。感谢您的回答,但它没有显示任何内容,输出为空
    $people = $xml->xpath('descendant::person');
    
    foreach ($people as $person) {
        echo $person['name'], "\n";
    }