2014-05-02 76 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