【问题标题】:Loading one file from XML root based on child value [duplicate]根据子值从 XML 根加载一个文件 [重复]
【发布时间】:2013-06-18 08:55:12
【问题描述】:

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

【问题讨论】:

  • 你的编程问题是?

标签: php xml


【解决方案1】:

只需使用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>";
    }
}

【讨论】:

  • 谢谢,完美运行
  • 如果我想显示所有结果但排除特定 id 我需要修改什么?
【解决方案2】:

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

服务器端

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

客户端

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

【讨论】:

  • 谢谢你也会看看这个选项
猜你喜欢
  • 1970-01-01
  • 2013-05-12
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
相关资源
最近更新 更多