//TheNode[position()!=1]
не работает, потому что здесь position()
относится к родительскому контексту каждого <TheNode>
. Он выберет все <TheNode>
s, которые не являются первыми в пределах их соответствующих родителей.
Но вы были на правильном пути. Что вы имели в виду было:
(//TheNode)[position()!=1]
Обратите внимание на круглые скобки - они заставляют предикат применяться ко всему выбранному набору узлов, а не к каждому узлу в отдельности.
К сожалению, даже если это допустимое выражение XPath, оно недопустимо в качестве шаблона соответствия. Шаблон соответствия должен быть значимым (применимым) к отдельному узлу, он не может быть выражением выбора.
Итак, @ решение Алохчи,
//TheNode[preceding::TheNode]
- это правильный способ выразить то, что вы хотите.