【问题标题】:How do I perform a case insensitive search for a node in PHP xpath?如何在 PHP xpath 中对节点执行不区分大小写的搜索?
【发布时间】:2009-06-05 01:07:51
【问题描述】:

我不希望搜索不区分大小写的字符串值。我想搜索节点而不考虑大小写。如果 XML 看起来像这样:

<items>
   <ITEM>My text!</ITEM>
</items>

我需要这样的东西才能工作:

$someXmlDoc->xpath("/items/item/text()");

目前,只有这样有效:

$someXmlDoc->xpath("/items/ITEM/text()");

【问题讨论】:

  • 重复:stackoverflow.com/questions/625986/… 答案已经存在 :)
  • 嗨 Bjorn -- 我确实看到了,但它看起来好像为字符串值而不是节点上不区分大小写提供了答案,这是我无法弄清楚的。

标签: php xpath


【解决方案1】:

php 支持的 xpath 1.0 中没有大小写转换(请参阅http://jp.php.net/manual/en/class.domxpath.php

可以使用翻译功能,如下所示,在非常有限的意义上。注意:不推荐,因为它不适用于非英文字符

/items/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'item']/text()

更新:如果 node() 不起作用,请尝试 name()

你也可以像下面这样做一个联合

/items/ITEM/text() | /items/item/text()

【讨论】:

  • 联合有效,但翻译无效。我接受这个答案。谢谢:)
【解决方案2】:

这很奇怪。 XML 标签区分大小写(http://www.w3schools.com/xml/xml_syntax.asp),所以&lt;item&gt;&lt;ITEM&gt; 是两个不同的标签。因此。 "/items/item/text()"/items/ITEM/text() 是两条不同的路径。

<items>
   <ITEM>My text!</ITEM>
   <item>Your text!</item>
</items>

“我的文字”和“你的文字”有不同的xpaths

【讨论】:

    【解决方案3】:

    考虑到您在同一主题上的previous questions 会出现另一个问题:“它必须是 xml 吗?” json呢?
    要在客户端将数据编码为json,您可以使用jquery-json,在最小化版本中仅占用2kb

    var jsondata = {
      sender: "CATS",
      subject: "All Your Base",
      items: []
    };
    for(var i=0; i<8; i++) jsondata.items.push(i);
    
    

    $.ajax({ url: "@987654324@", type: "post", dataType: "json", data: $.toJSON(jsondata), contentType: "application/json; charset=utf-8",

    然后您的服务器端 php 脚本可以使用json_decode() 解码数据,您将根据 javascript 对象/hash 的 json-representation 得到一个原生 php 数组/hash。
    要将数据发送回客户端,您可以使用json_encode()。您将获得 php 数组的 json 表示形式,并且由于设置了 dataType: "json",jquery 将返回一个包含这些值/属性的本机 javascript 对象。

    【讨论】:

      【解决方案4】:

      Jonathan Fingland 第一个变体对我也不起作用, 但我终于找到了解决方案。

      应该是

      /items/*[translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'item']/text()
      

      【讨论】:

        猜你喜欢
        • 2016-07-24
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        相关资源
        最近更新 更多