<xsl:for-each select="//filenames">
<xsl:variable name="current_filename" select="."/>
<xsl:for-each select="
document(.)//someNode[not(
. = document($current_filename/preceding-sibling::node())//someNode
)]
">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:for-each>
В приведенном выше коде (XSLT 1.0) у меня есть ряд документов (//filenames
), которые я хочу открыть и выбрать некоторые узлы, если только значение этого узла не равно значению одного и того же узла во всех предыдущих документах ,
Чтобы это сработало, мне пришлось вложить два цикла for-each, потому что мне нужно сохранить имя текущего документа в переменной, чтобы выбрать его предшествующего брата ($current_filename/preceding-sibling
).
Это все работает, но так как у меня есть два вложенных цикла, я не могу отсортировать результирующие узлы из всех документов, как если бы это была одна большая последовательность. Теперь он сортирует узлы по документу, если я вставляю правило сортировки в первое для каждого.
Кто-нибудь знает способ достижения этой сортировки в любом случае? Может быть, способ избежать необходимости использования переменной и, следовательно, вложенности циклов for-each?