Если вы все еще хотите знать, как работает ancestor
, он принимает родителя текущего узла, прародителя текущего узла и т. Д. До root. Таким образом, ваш запрос с ancestor
будет выглядеть так:
//attribute::vo/ancestor::*[1]/title/text()
Где ancestor
означает, что вы собираетесь собрать всех (великих) родителей, *
означает, что вам не важно, какие узлы эти (великие) родители были бы, и [1]
означает, что вам нужен «ближайший» к текущему узлу.
Тот же результат будет получен с помощью следующего запроса:
//attribute::vo/ancestor::book/title/text()
Так как он не принимает элемент root, потому что это не book
узел. Таким образом, у нас здесь «плоская» иерархия.
Следующий запрос будет принимать только книги с категорией «Сеть» (на самом деле это не то, что вы просили, но, вероятно, даст более четкое представление о том, как работать с осями). ):
//attribute::vo/ancestor::book[@category='web']/title/text()