Если вы находитесь в XPath 1.0 (и я полагаю, что это так, потому что люди, использующие более поздние версии, обычно упоминают этот факт), то в соответствии с XPath spe c, результатом будет набор узлов и набор узлов буквально набор узлов без определенного порядка. Однако все известные мне реализации возвращают результаты набора узлов в порядке документа, потому что именно так XSLT требует их, и большинство реализаций XPath разработаны с использованием XSLT в качестве важного варианта использования. Таким образом, Reader
элементы, вероятно, будут возвращены в том порядке, в котором они встречаются при сканировании документа в прямом направлении.
В XPath 3.1 вы можете вернуть последовательность узлов в выбранном порядке, написав
/ReaderDetails ! (Reader[Pin = "2325"],
Reader[Pin = "2421"],
Reader[Pin = "2424"])
или, возможно, (если требуемый заказ всегда «отсортирован по номеру пин-кода»),
sort(/ReaderDetails/Reader[Pin = ('2325', '2421', '2424'), (),
function($r) {number($r!Pin})
, но для этого вам потребуется установить другой движок XPath, например Saxon / C.
Невозможно вернуть последовательность узлов в не-порядке документов в XPath 1.0, поскольку такого типа данных нет. Единственный тип данных коллекции в XPath 1.0 - это набор узлов, который, как я упоминал, не имеет предписанного порядка. Поэтому ваш единственный вариант с XPath 1.0 - извлекать узлы по одному, используя отдельные выражения XPath, или, возможно, сортировать узлы в вызывающем приложении.