PHP XML DOM-基于父属性/元素区分节点
首先,感谢您花时间阅读本文:) 我需要帮助重新排序XML提要。我尝试过很多事情,做过很多研究,但都没有找到解决办法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>
<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