通过属性值PHP对XML进行排序

5 php xml simplexml

所以我有一个XML文件,我试图按顺序循环,根据属性,"顺序".

这是一个例子:

<page>
<talentTrees>
<tree name="Football" order="2">
<tree name="Baseball" order="0">
<tree name="Frisbee" order="1">
</talentTrees>
</page>
Run Code Online (Sandbox Code Playgroud)

我的目标是使用foreach遍历每个"树",但我想按顺序属性的顺序阅读它们:棒球,飞盘,足球.(0,1,2).

抱歉英语不好,不是我的第一语言.

Jos*_*vis 15

为了将来参考,您可以使用以下方法通过XPath查询节点,并通过XPath对结果进行排序:SimpleDOM.在此示例中,我<tree/>order属性的值对所有节点进行排序:

include 'SimpleDOM.php';

$page = simpledom_load_string('<page>
    <talentTrees>
        <tree name="Football" order="2"/>
        <tree name="Baseball" order="0"/>
        <tree name="Frisbee" order="1"/>
    </talentTrees>
</page>');

$nodes = $page->sortedXPath('//tree', '@order');

foreach ($nodes as $node)
{
    echo $node->asXML(), "\n";
}
Run Code Online (Sandbox Code Playgroud)


Øys*_*sen 8

这应该给你你想要的:

$string = <<<EOS
<page>
<talentTrees>
<tree name="Football" order="2" />
<tree name="Baseball" order="0" />
<tree name="Frisbee" order="1" />
</talentTrees>
</page>
EOS;

$xml = simplexml_load_string($string);

$trees = $xml->xpath('/page/talentTrees/tree');
function sort_trees($t1, $t2) {
    return strcmp($t1['order'], $t2['order']);
}

usort($trees, 'sort_trees');
var_dump($trees);
Run Code Online (Sandbox Code Playgroud)

$trees 现在按order属性排序.