Любой ответ в форме :
//queries/query[position() = last()]/query_id/text()
или
//queries/query/description[last()]/text()
неверно .
Это часто задаваемые вопросы : псевдо-оператор XPath //
имеет более низкий приоритет, чем оператор []
- поэтому в приведенных выше выражениях выбирается любой query
(или соответственно *)1020 *) элемент, который является последним дочерним элементом его родителя - это могут быть все элементы query
или description
.
Solution :
Используйте :
(//queries/query)[last()]/query_id/text()
Также обратите внимание: Использование псевдооператора //
обычно приводит к значительной потере эффективности, потому что это вызывает все (под) деревокорень в текущем узле, чтобы быть полностью пройденным (операция O (N ^ 2)).
Золотое правило : всякий раз, когда структура XML-документа (заранее) известна и стабильна, никогда не используйте //
.Вместо этого используйте выражение XPath, которое имеет ряд определенных шагов местоположения.
Например, если все элементы, которые вы хотите выбрать, можно выбрать с помощью:
/x/y/queries/query
, затем используйтеВышеупомянутое выражение XPath - не //queries/query