Почему это выражение XPath неверно? - PullRequest
1 голос
/ 22 апреля 2020

Может кто-нибудь сказать мне, почему это выражение XPath недопустимо?

/ReaderDetails/Reader[Pin=('2325', '2421', '2424')]

Полный код:

$dream_team_pins = implode('\', \'', array_map('trim',explode(',',get_option('dream_team_readers'))));
// Takes a comma separated list, converts to an array, and then implodes to a quoted comma separated list.
// This is currently outputting 2325', '2421', '2424 (the missing quotes at start and end are intentional)

$expression = '/ReaderDetails/Reader[Pin=(\''.$dream_team_pins.'\')]';
// I'm adding the single quotes at the start and end back in here so the entire expression is 
// outputting /ReaderDetails/Reader[Pin=('2325', '2421', '2424')]

$dream_team_readers = $readers->xpath($expression);

Но я продолжаю получать

Предупреждение: SimpleXMLElement :: xpath (): недопустимое выражение.

В двух словах, я хочу иметь возможность передать несколько значений в выражение xpath (взятые из строки, разделенной запятой), чтобы отфильтровать XML массив.

Какой совет по моему выражению?

1 Ответ

1 голос
/ 22 апреля 2020

Это выражение XPath использует конструкцию XPath 2.0, но ваша библиотека XPath реализует только XPath 1.0.

Измените

[Pin=('2325', '2421', '2424')]

на

[Pin='2325' or Pin='2421' or Pin='2424')]

для реализации вашего дизъюнкция в XPath 1.0.

...