Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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 XML DOM-基于父属性/元素区分节点_Php_Xml_Dom - Fatal编程技术网

PHP XML DOM-基于父属性/元素区分节点

PHP XML DOM-基于父属性/元素区分节点,php,xml,dom,Php,Xml,Dom,首先,感谢您花时间阅读本文:) 我需要帮助重新排序XML提要。我尝试过很多事情,做过很多研究,但都没有找到解决办法 <xml> <group> <result> <title>Title</title> <url>URL</url> <text>Text</text> </result> <result>

首先,感谢您花时间阅读本文:)

我需要帮助重新排序XML提要。我尝试过很多事情,做过很多研究,但都没有找到解决办法

<xml>
<group>
   <result>
      <title>Title</title>
      <url>URL</url>
      <text>Text</text>
   </result>
   <result>
      <title>Title</title>
      <url>URL</url>
      <text>Text</text>
   </result>
</group>
<group region=top>
   <result>
      <title>Title</title>
      <url>URL</url>
      <text>Text</text>
   </result>
</group>
<group type=bottom>
   <result>
      <title>Title</title>
      <url>URL</url>
      <text>Text</text>
      <moreinfo>
             <result>
             <title>Title</title>
             </result>
             <result>
             <title>Title</title>
             </result>
      </moreinfo>
   </result>
</group>
</xml>

您发布的XML无效且不一致,因为属性值必须包含在
”中,要获得一致性,请参阅我上面的评论

下面是我如何使用
simplexml
xpath
实现的,它也可以很容易地适应
DOM

$xml = simplexml_load_string($x); // assuming XML in $x

$regions['top'] = $xml->xpath("group[@region='top']/result");
$regions['middle'] = $xml->xpath("group[not(@*)]/result"); // <group> with no attribute
$regions['bottom'] = $xml->xpath("group[@region='bottom']/result");

// output:
foreach ($regions as $region => $results) {

    echo "$region:<br />";
    foreach ($results as $result) {
    echo $result->title . "<br />";
    if (count($result->moreinfo) > 0)
        foreach ($result->moreinfo->result as $subresult) 
                    echo "____$subresult->title<br />";
    } // foreach $results
} // foreach $regions
$xml=simplexml\u load\u string($x);//假设XML为$x
$regions['top']=$xml->xpath(“group[@region='top']]/result”);
$regions['middle']=$xml->xpath(“组[非(@*)]/result”);//毫无属性
$regions['bottom']=$xml->xpath(“组[@region='bottom']]/result”);
//输出:
foreach($区域为$区域=>$结果){
回显“$region:
”; foreach($results作为$result){ echo$result->title.“
”; 如果(计数($result->moreinfo)>0) foreach($result->moreinfo->result as$subresult) 回显“__$subresult->title
”; }//foreach$结果 }//foreach$区域

看到它在工作:

1。这里有
,没有
区域
属性-打字错误?2.您希望这些
result/moreinfo/result
-节点发生什么情况?请解释!很抱歉反应太晚!我用XPath搞乱了问题的答案,但这段代码要好得多!更简洁!谢谢你@michi!
$xml = simplexml_load_string($x); // assuming XML in $x

$regions['top'] = $xml->xpath("group[@region='top']/result");
$regions['middle'] = $xml->xpath("group[not(@*)]/result"); // <group> with no attribute
$regions['bottom'] = $xml->xpath("group[@region='bottom']/result");

// output:
foreach ($regions as $region => $results) {

    echo "$region:<br />";
    foreach ($results as $result) {
    echo $result->title . "<br />";
    if (count($result->moreinfo) > 0)
        foreach ($result->moreinfo->result as $subresult) 
                    echo "____$subresult->title<br />";
    } // foreach $results
} // foreach $regions