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

如何在PHP xpath中对节点执行不区分大小写的搜索?,php,xpath,Php,Xpath,我不希望字符串值的搜索不区分大小写。我想搜索节点,不考虑区分大小写。如果XML如下所示: <items> <ITEM>My text!</ITEM> </items> 目前,只有这样做有效: $someXmlDoc->xpath("/items/ITEM/text()"); xpath 1.0中没有php支持的大小写转换(请参阅) 您可以在非常有限的意义上使用下面所示的translate函数。注意:不推荐,因为它不适用于非英语字符

我不希望字符串值的搜索不区分大小写。我想搜索节点,不考虑区分大小写。如果XML如下所示:

<items>
   <ITEM>My text!</ITEM>
</items>
目前,只有这样做有效:

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

xpath 1.0中没有php支持的大小写转换(请参阅)

您可以在非常有限的意义上使用下面所示的translate函数。注意:不推荐,因为它不适用于非英语字符

/items/*[translate(node(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'item']/text()
Upd:如果node()不起作用,请尝试name()

你也可以做如下的联合

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

这很奇怪。XML标记区分大小写(),因此
是两个不同的标记。因此
“/items/item/text()”
/items/item/text()
是两个不同的路径

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

我的文字!
你的文字!
“我的文本”和“你的文本”有不同的
xpath
s

考虑到你对同一主题的看法,另一个问题是:“它必须是xml吗?”json呢?
要在您可以使用的客户端上将数据编码为json,在最小化版本
var jsondata={
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",
发送者:“猫”, 主题:“所有你的基础”, 项目:[] };
对于(var i=0;iJonathan Fingland,第一种变体对我也不起作用, 但我终于找到了解决办法

应该是

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

重复:答案已经在那里:)嗨,比约恩——我确实看到了,但它似乎为字符串值的不区分大小写提供了答案,而不是节点,这是我无法理解的。联合有效,但转换无效。我接受这个答案。谢谢:)
/items/*[translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'item']/text()