下面的代码尝试查找所有以“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>
答案 0 :(得分:1)
我不相信concat
是你想要使用的功能。您的xpath当前正在检查“DesktopABCDEFGHIJKLMNOPQRSTUVWXYZ”,“abcdefghijklmnopqrstuvwxyz”是否以“desk”开头。
假设意图是用xpath 1.0小写name元素,你想使用translate
:
/products/product[
starts-with(
normalize-space(
translate(name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
),
'desk'
)
]
这会降低名称元素文本的大小,删除前导空格并将开头与“桌面”进行比较。