XPath - start-with和normalize-space不能一起工作

时间:2014-02-11 13:01:44

标签: php xml xpath

下面的代码尝试查找所有以“desk”开头的XML“name”元素(使用starts-with方法)并修剪XML元素中的任何前导空格(使用normalize-space和concat方法)。但是,代码不会检索任何数据。和建议?提前谢谢!

$xmldoc = simplexml_load_file("products.xml");
$query = $xmldoc->xpath("/products/product[starts-with(normalize-space(concat(' ',name,    'ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz')), 'desk')]");
foreach($query as $Products) {
echo $Products->name . " ";
echo $Products->price . "<br>";
}


<products>

<product type="Electronics">
<name> Desktop</name>
<price>499.99</price>
<store>Best Buy</store>
</product>

</products>

1 个答案:

答案 0 :(得分:1)

我不相信concat是你想要使用的功能。您的xpath当前正在检查“DesktopABCDEFGHIJKLMNOPQRSTUVWXYZ”,“abcdefghijklmnopqrstuvwxyz”是否以“desk”开头。

假设意图是用xpath 1.0小写name元素,你想使用translate

/products/product[
    starts-with(
        normalize-space(
            translate(name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
        ),
        'desk'
    )
]

这会降低名称元素文本的大小,删除前导空格并将开头与“桌面”进行比较。