根据子值从XML根目录加载一个文件

时间:2013-06-18 08:55:12

标签: php xml

我有一个xml feed我正在使用PHP解压缩,我编写的代码用于查找我需要的值并在页面上正确显示。

XML代码是:

<Agents>
   <Agent>
      <id></id>
      <description></description>
      <name></name>
   </Agent>
</Agents>

PHP代码

<?php
$url  = "urlgoeshere";
$xml  = simplexml_load_file($url);

for ($html = "", $i = 0; $i < 10; $i++)
{
    $id          = $xml->Agent[$i]->id;
    $name        = $xml->Agent[$i]->name;
    $description = $xml->Agent[$i]->description;

    $html .= "<h1>$id</h1><h2>$name</h2><p>$description</p>";
}

echo $html;

这设置为加载11个代理工作正常,但我想更改它,并根据其ID加载一个特定的代理。

因此,例如,如果某个代理在xml字段上的id为1200,我想找到它并仅加载那个代理,但似乎无法解决这个问题。

2 个答案:

答案 0 :(得分:0)

只需使用if

continue条件
$idToFind = 1200;
for ($i = 0; $i < 10; $i++) {
    $id = $xml->Agent[$i]->id;
    if ($id != $idToFind)
        continue;
    else {
        $name = $xml->Agent[$i]->name;
        $description = $xml->Agent[$i]->description;
        $html .="<h1>$id</h1><h2>$name</h2><p>$description</p>";
    }
}

答案 1 :(得分:0)

您有两种选择。要么过滤客户端(在代码中),要么过滤服务器端。

服务器端

如果您请求XML文件,例如从RESTfull service您可能希望将参数直接传递给您的请求。 您可以申请example.com/agents.xml或类似的内容,而不是请求example.com/agents/1.xml。在这种情况下,您必须检查您从中请求XML文件的API。此类过滤的专业人员是,您必须加载较小的数据和流量的xml文件。

客户端

如果您无法过滤服务器端的数据,则需要在PHP代码中进行检查。最简单的选择是在循环中添加if语句。既然你正在谈论1200个代理商,它可能是最容易的。如果您需要加载更多条目,或者您的应用程序需要速度和效率,您可能需要使用另一个XML解析器。 SimpleXML类将整个文件加载到CPU中。我写了一个相对有效的方法to parse an XML file with the XML Reader,它更有效,需要更少的内存。您可以随意编辑示例以满足您的需求。