根据2个子元素选择元素

时间:2016-11-27 20:22:15

标签: php xpath simplexml

这是我的XML文件的一部分

<item>
    <title>The product</title>
    <description>Product description</description>
    <oldprice>350</oldprice>
    <price>250</price>
    <category>KIDS DISCOUNT</category>
    <link>page.htm</link>
    <img>product.jpg</img>
</item>

如果我想要产品折扣,那就没关系:

<?php  
        $xml   = simplexml_load_file('file.xml');
        $items = $xml->xpath('//item/category[contains(.,"DISCOUNT")]/.. ');
        foreach($items as $item){
            echo '<p>...</p>';
        }
?>

如果我想要的产品少于300,那就OK:

<?php  
    $xml   = simplexml_load_file('file.xml');
    $items = $xml->xpath('//item/price[.<300]/.. ');
    foreach($items as $item){
        echo '<p>...</p>';
?>

但如果我想要两者,我不能......我试过了,但这是错的:

<?php  
    $xml   = simplexml_load_file('file.xml');
    $items = $xml->xpath('//item/price[.<300] [//item/category[contains(.,"DISCOUNT")]]/.. ');
    foreach($items as $item){
        echo '<p>...</p>';
?>

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

要让item 的价格低于300,或者包含“DISCOUNT”文字的类别:

//item[category[contains(.,"DISCOUNT")] or price[. < 300]]

如果一个item总是最多有一个category和一个price,则上述表达式可以进一步简化为:

//item[contains(category,"DISCOUNT") or price < 300]

如果您希望选择item来完成两个条件,那么只需将or替换为and