2012-11-07 50 views
1

我嘗試下面的搜索代碼,但它只顯示第一個子節點。我的代碼中缺少一些東西嗎?PHP:在XML中搜索字符串

---- ----的catalog.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Catalog> 
    <Category> 
     <Name>CAT1</Name> 
     <Location> 
      <Room>Alpha</Room> 
     </Location> 
     <Location> 
      <Room>Bravo</Room> 
     </Location> 
     <Location> 
      <Room>Charlie</Room> 
     </Location> 
    </Category> 
    <Category> 
     <Name>CAT2</Name> 
     <Location> 
      <Room>Delta</Room> 
     </Location> 
     <Location> 
      <Room>Eagle</Room> 
     </Location> 
     <Location> 
      <Room>Falcon</Room> 
     </Location> 
    </Category> 
</Catalog> 

---- ---- arr0.php

<?php 
$catalog = simplexml_load_file("catalog.xml"); 
$category = $catalog->Category; 

foreach($category->Name as $name) 
{ 
    $menu = (string)$name; 
    $i = 0; 
    if ($menu == "CAT1") 
{ 
     echo $category->Location->Room[$i]; 
     $i++;  
} 
else 
{ 
     echo "No result"; 
} 
} 
?> 

---------輸出----------

阿爾法


布拉沃和Charlie從顯示丟失。需要有人提醒我錯在哪裏?

感謝

回答

0

我想這是你想要的

<?php 
$catalog = simplexml_load_file("catalog.xml"); 
$category = $catalog->Category; 
$found = false; 
foreach($category as $c) 
{ 
    $menu = (string) ($c->Name); 
    if ($menu == "CAT1") 
    { 
     foreach ($c->Location as $loc) 
     { 
      echo $loc->Room; 
     } 
     $found = true; break; 
    } 
} 
if (!$found) 
{ 
    echo "No result"; 
} 
?> 

刪除,如果你能有一個以上的類別與break;聲明搜索到的Name元素。

+0

嗨guido ,它仍然只顯示Alpha。 $ i發生了什麼?查看我的結果: Alpha 檢查print_r SimpleXMLElement對象([0] => Alpha) 檢查var_dump對象(SimpleXMLElement)#8(1){[0] =>字符串(5)「Alpha」} Bravo Check print_r SimpleXMLElement對象([0] =>布拉沃) 檢查var_dump對象(SimpleXMLElement)#7(1){[0] => string(5)「Bravo」}查理 檢查print_r SimpleXMLElement對象([0] => Charlie) 檢查var_dump對象(SimpleXMLElement)#8(1){[0] => string(7)「Charlie」}無結果 – user1787756

+0

我在本地測試了它,它輸出「AlphaBravoCharlie」 –

+0

嗨Guido,測試結果:AlphaBravoCharlieNo結果//沒有結果也出現,意味着If Else語句失敗。 – user1787756

0

嘗試修改你的代碼:

echo $category->Location[$i]->Room; 
+0

試過但仍然是一樣的。我創建了一個print_r和var_dump,如下所示:Alpha 檢查print_rSimpleXMLElement對象([0] => Alpha) 檢查var_dumpobject(SimpleXMLElement)#7(1){[0] => string(5)「Alpha」} – user1787756