-1

我有一个使用 PHP 提取的 xml 提要,我编写了代码来查找我需要的值并在页面上正确显示。

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,我想找到它并只加载一个代理,但似乎无法找到一种简单的方法来做到这一点。

4

2 回答 2

0

只需使用if带有 a 的条件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>";
    }
}
于 2013-06-18T09:00:01.570 回答
0

你有两个选择。您可以过滤客户端(在您的代码中)或过滤服务器端。

服务器端

如果您从RESTfull 服务请求 XML 文件,您可能希望将参数直接传递给您的请求。而不是请求example.com/agents.xml,您可以请求example.com/agents/1.xml或类似的东西。在这种情况下,您必须检查您从中请求 XML 文件的 API。此类过滤的优点是,您必须加载具有较少数据和流量的较小 xml 文件。

客户端

如果您无法在服务器端过滤数据,则需要在您的 PHP 代码中进行检查。最简单的选择是if在循环中添加一条语句。而且由于您谈论的是 1200 个代理,它也可能是最简单的。如果您必须加载更多条目或应用程序需要速度和效率,您可能需要使用另一个 XML 解析器。SimpleXML 类将整个文件加载到 CPU 中。我已经编写了一种相对有效的方法来使用 XML Reader 解析 XML 文件,这种方法效率更高并且需要更少的内存。随意编辑示例以满足您的需求。

于 2013-06-18T09:06:11.317 回答