【问题标题】:XPath/XML lowercase query methodsXPath/XML 小写查询方法
【发布时间】:2014-02-07 11:41:05
【问题描述】:

下面的 Xpath 和 PHP 代码检查 XML 文件中任何“name”元素中的文本是否包含字符串“desk”(参见代码的第二行)。如果 Xpath 搜索字符串是“Desk”(带有大写 D),它将检索第一个 XML 名称元素中的文本,即“Desktop”。但由于 Xpath 搜索字符串是“desk”(带有小写字母 d),因此没有检索到任何内容。

有没有办法对此进行编码,以便 Xpath 搜索字符串“desk”(带有小写字母 d)可以从 XML 文件的 name 元素中检索“Desktop”(带有大写字母 D)?或者有没有办法让查询不区分大小写?

这是 XPath 和 PHP 代码:

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

这是 XML 文件(名为 product.xml):

<products>
   <product type="Electronics">
      <name>Desktop</name>
      <price>499.99</price>
      <store>Best Buy</store>
   </product>
   <product type="Hardware">
      <name>Hand Saw</name>
      <price>99.99</price>
      <store>Lowes</store>
   </product>
</products>

谢谢!

【问题讨论】:

标签: php xml xpath


【解决方案1】:

如果你使用

$query = $xmldoc->xpath('/products/product[contains(translate(name, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"),"desk")]');

你有一个不区分大小写的比较,至少对于 translate 调用转换的字母。

【解决方案2】:

试试这个..

$query = $xmldoc->xpath('/products/product[contains(name,"_esk")]');  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多