如何在PHP xpath中对节点执行不区分大小写的搜索?

时间:2009-06-05 01:07:51

标签: php xpath

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

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

我需要这样的工作:

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

目前,只有这个有效:

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

4 个答案:

答案 0 :(得分:2)

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

可以使用翻译功能,如下所示,非常有限。注意:不建议使用,因为它不适用于非英文字符

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

Upd:如果node()不起作用,请尝试使用name()

您也可以按照以下方式进行联合

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

答案 1 :(得分:0)

这很奇怪。 XML标记区分大小写(http://www.w3schools.com/xml/xml_syntax.asp),因此<item><ITEM>是两个不同的标记。从而。 "/items/item/text()"/items/ITEM/text()是两条不同的路径。

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

“我的文字”和“您的文字”有不同的xpath s

答案 2 :(得分:0)

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: "http://localhost/test.php", type: "post", dataType: "json", data: $.toJSON(jsondata), contentType: "application/json; charset=utf-8",

然后你的服务器端php脚本可以用json_decode()解码数据,你将根据javascript对象/ hash的json表示得到一个原生的php数组/哈希。
要将数据发送回客户端,您可以使用json_encode()。你得到你的php数组的json表示,并且因为dataType:“json”被设置,jquery将返回一个包含这些值/属性的本机javascript对象。

答案 3 :(得分:0)

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

应该是

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