如何根据标记值对XML返回进行排序


How to order a XML return depending on its tags values?

假设我有一个php页面,它动态加载返回XML的方法的返回值。XML是这样的:

<SYSTEM>
  <GUY>
    <ID>500</ID>
    <NAME>Joseph</NAME>
    <EMAIL>joseph@mark</EMAIL>
    <ERROR />
  </GUY>
  <GUY>
    <ID>510</ID>
    <NAME>Richard</NAME>
    <EMAIL>richard@gmail.com</EMAIL>
  </GUY>
</SYSTEM>

现在我的PHP文件有一个简单的"if"来检查ERROR标签。如果检测到,则打印错误。现在的结果是在正确打印(Richard)之前打印错误。两者都应该打印出来,但我想把错误放在底部,在正确的结果之后。首先打印错误,因为它是XML的第一个结果。我怎样才能绕过它呢?我想这可能很简单,但我真的不明白。

我的PHP验证是这样的(它基于GUY标记的数量运行,因此根据上面的XML,它将是两次):

$xmlresult = simplexml_load_string($xml);
$error = $xmlresult->xpath("//ERROR");
if($error==true){
   echo "error message here";
} else {
   echo "wee! no errors!"
}

我处理这个问题的方法是,在遍历XML文件时将所有错误结果临时存储在一个列表中,然后打印出正确的结果。然后,一旦您到达文件的末尾,您就可以遍历错误列表,并在所有正确的错误之后打印它们。

这种简单的算法应该适用于几乎任何遍历XML的方法,既可以使用返回漂亮对象的解析库,也可以使用更暴力的基于字符串的方法。