如何在XML中更改子标记顺序(由PHP生成)


How to change child tag order in XML (Generated by PHP)

我有一个flash应用程序,其中多个用户可以登录并上传图像。用户登录后可以查看自己上传的图片,也可以查看其他用户上传的图片(只允许上传图片)。为此,我将通过php生成XML文件。

请检查xml文件

<images>
    <users user_name="Hardik">
        <image image_id="1316683023140" image_title="water" image_desc="water" image_path="all_users/Hardik/1316683023140.jpg" image_like="false"/>
        <image image_id="1316683057577" image_title="sunset" image_desc="sunset" image_path="all_users/Hardik/1316683057577.jpg" image_like="false"/>
        <image image_id="1316683115124" image_title="hills" image_desc="hills" image_path="all_users/Hardik/1316683115124.jpg" image_like="false"/>
        <image image_id="1316683713159" image_title="sun" image_desc="sun" image_path="all_users/Hardik/1316683713159.jpg" image_like="false"/>
        <image image_id="1316684544200" image_title="sun" image_desc="sun" image_path="all_users/Hardik/1316684544200.jpg" image_like="false"/>
        <image image_id="1316686014899" image_title="sun" image_desc="sun" image_path="all_users/Hardik/1316686014899.jpg" image_like="false"/>
        <image image_id="1316600184214" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600184214.jpg" image_like="false"/>
        <image image_id="1316668356801" image_title="hello" image_desc="hello" image_path="all_users/Hardik/1316668356801.jpg" image_like="false"/>
        <image image_id="1316600221759" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600221759.jpg" image_like="false"/>
        <image image_id="1316600193960" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600193960.jpg" image_like="false"/>
        <image image_id="1316600172938" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600172938.jpg" image_like="false"/>
        <image image_id="1316600144316" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600144316.jpg" image_like="false"/>
        <image image_id="1316600173551" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600173551.jpg" image_like="false"/>
        <image image_id="1316600177792" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600177792.jpg" image_like="false"/>
        <image image_id="1316496700758" image_title="sunset" image_desc="sunset" image_path="all_users/Hardik/1316496700758.jpg" image_like="false"/>
        <image image_id="1316252181829" image_title="allow" image_desc="allow" image_path="all_users/Hardik/1316252181829.jpg" image_like="false"/>
        <image image_id="1316690195793" image_title="asasdas" image_desc="asdasd" image_path="all_users/Hardik/1316690195793.jpg" image_like="false"/>
        <image image_id="1316600153509" image_title="asd" image_desc="asd" image_path="all_users/Hardik/1316600153509.jpg" image_like="false"/>
        <image image_id="1316408901775" image_title="winter" image_desc="winter" image_path="all_users/Hardik/1316408901775.jpg" image_like="false"/>
    </users>
    <users user_name="raj">
            <image image_id="1315996252734" image_title="abc" image_desc="abc" image_path="all_users/raj/1315996252734.jpg" image_like="false"/>
    </users>
    <users user_name="sandip">
            <image image_id="1315996256153" image_title="abc" image_desc="abc" image_path="all_users/sandip/1315996256153.jpg" image_like="false"/>
    </users>
</images>

我有一个逻辑问题与我的XML文件(这是由PHP生成的)。现在我想改变子标签的顺序。我想有一个用户(已登录)的子标记在第一个位置。

说明如果sandip登录,他的子标签应该优先出现,而不是硬的。

你可以在这里查看我的php代码

<?php
    require_once('connection.php');
    header('Content-type: text/xml');
    echo "<?xml version='1.0' encoding='UTF-8'?>";
    echo "<images>";
    $id='';
    $count=0;
    $result_1 = '';

    $query = "select  ui.userId as 'UI userId', ua.userName as 'UI userName', ui.imageId as 'UI ImageId', ul.imageId as 'UL ImageId' , ui.imageRights, ui.imagePath, ui.imageTitle, ui.imageDesc from user_account ua, (select * from user_images where userId=".$_REQUEST['userId']." or imageRights='Allow') as ui left join (select * from user_likes where userId=".$_REQUEST['userId'].") as ul on ui.imageId = ul.imageId where ua.userId=ui.userId order by ui.userId";
    $result_row = mysql_query($query);
    while($row = mysql_fetch_array($result_row, MYSQL_ASSOC))
    {
            if($id != $row['UI userId'])
            {
                if($count == 0)
                {
                    $result_1 .= "<users user_name='".$row['UI userName']."'>";
                }
                else
                {
                    $result_1 .= "</users>";
                    $result_1 .= "<users user_name='".$row['UI userName']."'>";
                }
                $id = $row['UI userId'];
            }
            $result_1 .= "<image image_id='".$row['UI ImageId']."' image_title='".$row['imageTitle']."' image_desc='".$row['imageDesc']."' image_path='".$row['imagePath']."' image_like='";
            if($row['UL ImageId'])
                $result_1 .= "true";
            else
                $result_1 .= "false";
            $result_1 .= "' />";
            $count++;
            if($count == mysql_num_rows($result_row))
                $result_1 .= "</users>";
    }
    echo $result_1;
    echo "</images>";
?>
如果您有更好的解决方案,请转发。

我想建议一些修复你的php脚本除了解决你的问题:

$num_of_rows = mysql_num_rows($result_row); // Don't call this every loop it's very slow
$rows = [];
while($row = mysql_fetch_array($result_row, MYSQL_ASSOC)){
    if($id == $row['UI userId']){
        // Print the logged in user's images
    } else {
        $rows[] = $row;
    }
}
// Print here the rest of the results
foreach ($rows as $row) {
    if($id != $row['UI userId'])
    {
        if($count == 0)
        {
            $result_1 .= "<users user_name='".$row['UI userName']."'>";
        }
        else
        {
            $result_1 .= "</users>";
            $result_1 .= "<users user_name='".$row['UI userName']."'>";
        }
        $id = $row['UI userId'];
    }
    $result_1 .= "<image image_id='".$row['UI ImageId']."' image_title='".$row['imageTitle']."' image_desc='".$row['imageDesc']."' image_path='".$row['imagePath']."' image_like='";
    if($row['UL ImageId'])
        $result_1 .= "true";
    else
        $result_1 .= "false";
    $result_1 .= "' />";
    $count++;
    if($count == $num_of_rows)
        $result_1 .= "</users>";
}
echo $result_1;
echo "</images>";
?>