2014-05-02 100 views
0

我想了解SimpleXMLElement(不是DOM),這是我第一次處理XML和PHP。我想檢查是否string == node[attribute];那麼,如果another string == node/child[attribute];最後,如果。檢查字符串是否屬於xml

使用在我的XML文件中的話,僞代碼將是:

if dish[name] == "Potato": 
    if how[name] == "fried": 
    if price[size=small] == "1.23": 
     do something. 

XML文件:

<menu> 
    <dish name="Potato"> 
    <how name="fried"> 
     <price size="small">1.23</price> 
     <price size="big">4.56</price> 
    </how> 
    <how name="baked"> 
     <price size="small">5.23</price> 
     <price size="big">6.56</price> 
    </how> 
    </dish> 
</menu> 

PHP

$xml = simplexml_load_file('xmlfile.xml'); 


if ((string) $xml->dish['name'] == "Potato") { 
    if ((string) $xml->dish->how['name'] == 'fried') { 
    if ((string) $xml->dish->how['name="fried"']->price['size="small"'] == '1.23') { 
     echo 'OK';  
    } 
    } 
} else { 
    echo 'something is wrong'; 
} 

唯一可行的就是我可以檢查'土豆'是否是一個菜[「名稱」]。其他一切都是錯誤的,我無法弄清楚如何去做。

感謝,

+0

'how'是一個數組,你需要遍歷它。 – Barmar

+1

要壞你不想使用DOM:https://eval.in/145696 – ThW

+0

謝謝,@Barmar。我不知道如何迭代'如何'(我嘗試了foreach)。什麼都沒發生。而且,這不是我不想使用DOM。這是我開始學習,我被告知DOM比simpleXML更復雜。我認爲對於初學者來說,使用simpleXML會更容易。你認爲這不是真的嗎?謝謝! – user3097405

回答

0

要選擇的小炸土豆的價格,你可以使用xpath,就像SQL對XML:現在

$xml = simplexml_load_string($x); // assume XML in $x 

$price = $xml->xpath("/menu/dish[@name = 'Potato']/how[@name = 'fried']/price[@size = 'small']")[0]; 

,如果有小的炒土豆,$price = 1.23,否則NULL

if (! is_null($price)) 
    echo "you can get it for $price!"; 
else 
    echo "it is not available, sorry!"; 

注意陣列在的xpath -line ...[0];結束解引用需要PHP >= 5.4。如果你是在一個較低的版本,更新或做:

$price = $xml->xpath("/menu/dish[@name = 'Potato']/how[@name = 'fried']/price[@size = 'small']"); 
$price = $price[0]; 

看到它在行動:https://eval.in/145721

+0

這是完美的,@ michi!我不知道我可以使用變量來存儲xpath中的數據。非常感謝你的時間和你的幫助。 – user3097405

+0

@ user3097405歡迎光臨! – michi