php - 基于2个子元素选择元素

标签 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,可以:

<?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>';
?>


有人可以帮助我吗?

最佳答案

要获取价格低于300或类别包含文本“ DISCOUNT”的item

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


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

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


如果要选择item满足这两个条件,则只需将or替换为and

关于php - 基于2个子元素选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40833476/

相关文章:

php - 设置外键检查不起作用 Laravel 迁移

php - 了解 PHP 中 Postgres Like 命令中的参数

php - 在使用mysql更新数据期间如何检查输入的字段是否已经存在

xpath - 根据 XPATH 条件返回字符串值

PHP - SimpleXML 解析错误

php - 如何访问 <game :title> with simplexml? 等元素

php - 在mysql中获取php结果

java - Xpath - 评估函数返回 javax.xml.transform.TransformerException

xml - 如何在不进行转义的情况下在 PowerShell 中获取转义的 xml 属性值

php - 如果节点具有属性,如何从 xml 检索值?