Учитывая этот фрагмент XML:
<root> <!-- $root points here -->
<!-- ... -->
<A visible="true">
<B visible="false">
<C visible="true"/> <!-- but effectively false! -->
</B>
<D visible="true">
<E visible="true" />
<F visible="false" />
</D>
</A>
<!-- ... -->
</root>
выполнение запроса $root//A
даст мне A
и всех его потомков. Пока все хорошо.
Вместо этого я хочу отфильтровать потомков A
по предикату, скажем [@visible=true]
. Я ожидаю, что запрос вернет
<A visible="true">
<D visible="true">
<E visible="true" />
</D>
</A>
вместо этого, т.е. отфильтровать все дочерние элементы, которые не соответствуют предикату (или чьи родители не соответствуют ему).
Представьте себе систему графического интерфейса, которая описана в XML, как описано выше, и где я отфильтровываю дерево на предмет видимых элементов при его рендеринге.
Я думаю, это было бы тривиально с XSLT, но я обязан использовать XQuery.