2013-06-18 22 views
-1

我有一個XML提要,我使用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字段上具有1200的ID,我想查找該代理並僅加載該代理,但似乎無法找到一個簡單的方法來執行此操作。

+1

而你的編程問題是? – hakre

回答

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>"; 
    } 
} 
+0

謝謝,完美的工作 – user2496374

+0

如果我想顯示所有的結果,但排除一個特定的ID我需要修改什麼? – user2496374

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,它更高效,需要更少的內存。隨意編輯示例以適應您的需求。

+0

謝謝你也會看看這個選項 – user2496374

相關問題