【问题标题】:XPath - starts-with and normalize-space not working togetherXPath - 起始空间和规范化空间不能一起工作
【发布时间】:2014-02-11 13:01:44
【问题描述】:

下面的代码尝试查找所有以“desk”开头的 XML“名称”元素(使用 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>

【问题讨论】:

    标签: php xml xpath


    【解决方案1】:

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

    假设意图是使用 xpath 1.0 小写名称元素,您想使用 translate

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

    这会将名称元素文本小写,删除前导空格并将开头与“desk”进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-04
      • 2012-02-15
      相关资源
      最近更新 更多