Как выполнить поиск узла без учета регистра в PHP xpath? - PullRequest
2 голосов
/ 05 июня 2009

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

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

Мне нужно что-то вроде этого для работы:

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

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

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

Ответы [ 4 ]

2 голосов
/ 05 июня 2009

В xpath 1.0 нет преобразования регистра, поддерживаемого php (см. 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()
0 голосов
/ 26 февраля 2016

Первый вариант Джонатана Фингланда у меня тоже не сработал, но я наконец нашел решение.

должно быть

/items/*[translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'item']/text()
0 голосов
/ 05 июня 2009

Принимая во внимание ваши предыдущие вопросы по той же теме, другой вопрос погружается: "Должен ли это быть 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);</p>

<p>$.ajax({
  url: "<a href="http://localhost/test.php" rel="nofollow noreferrer">http://localhost/test.php</a>",
  type: "post",
  dataType: "json",
  data: $.toJSON(jsondata),
  contentType: "application/json; charset=utf-8",
Затем ваш php-скрипт на стороне сервера может декодировать данные с помощью json_decode () , и вы получите собственный массив / хэш php в соответствии с json-представлением объекта / хэша javascript.
Для отправки данных обратно клиенту вы можете использовать json_encode () . Вы получаете json-представление вашего php-массива, и поскольку dataType: "json" был установлен, jquery вернет нативный объект javascript, содержащий эти значения / свойства.
0 голосов
/ 05 июня 2009

Это странно. Теги 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...