2009-06-05 1 views
2

Я не хочу, чтобы значение строки было нечувствительным к регистру. Я хочу выполнить поиск узла без учета чувствительности к регистру. Если XML выглядит следующим образом:Как выполнить регистр без учета регистра для узла в PHP xpath?

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

мне нужно что-то вроде этого, чтобы работать:

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

В настоящее время, только это работает:

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

Дубликат: http://stackoverflow.com/questions/625986/how-can-i-use-xpath-to-perform-a-case-insensitive-search-and -support-non-english Ответ уже есть :) –

+1

Привет, Бьорн. Я видел это, но это выглядело так, как будто это обеспечило ответ для нечувствительного к регистру строкового значения, а не узла, что и есть Я не мог понять. – 2009-06-05 11:44:48

ответ

2

Там нет преобразования случай в XPath 1.0 как указано в php (см. http://jp.php.net/manual/en/class.domxpath.php)

вы можете используйте функцию перевода, показанную ниже в очень ограниченном смысле. Примечание: не рекомендуется, так как он не будет работать для неанглийских символов

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

вы могли бы также сделать союз, как показано ниже

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

Профсоюз работает, но в переводе нет. Я принимаю за этот ответ. Благодаря :) – 2009-06-05 11:49:54

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

0

Принимая ваши previousquestions на ту же тему на счет другой вопрос погружает: «Есть ли у него быть XML» Как насчет json?
Для кодирования данных в формате JSON на стороне клиента, вы можете использовать jquery-json, который принимает только 2К в свернутом версии

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",

Тогда ваш серверный скрипт может декодировать данные с json_decode(), и вы получите родной PHP массив/хэш в соответствии с json-представлением объекта javascript/hash.
Для отправки данных обратно клиенту, вы можете использовать json_encode(). Вы получаете json-представление вашего php-массива, и поскольку dataType: «json» был установлен, jquery вернет собственный объект javascript, содержащий эти значения/свойства.

0

Первый вариант Jonathan Fingland для меня тоже не работал, , но я нашел решение окончательно.

Это должно быть

/items/*[translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'item']/text() 
Смежные вопросы