2015-03-05 4 views
1

Можно ли получить максимальные узлы внуков во всех дочерних узлах, не пробираясь через них? В приведенном ниже примере представлены четыре узла документа с 4, 5, 1 и 2 узлами значений соответственно. Поэтому в идеале я хотел бы вернуть 5 в качестве ответа выражения/функции.XSLT - Получить максимальные дочерние узлы для группы узлов

Возможно ли это без цикла в xslt 2.0 или с помощью xpath?

XML:

<File> 
    <Document> 
     <Value>..</Value> 
     <Value>..</Value> 
     <Value>..</Value> 
     <Value>..</Value> 
    </Document> 
    <Document> 
     <Value>..</Value> 
     <Value>..</Value> 
     <Value>..</Value> 
     <Value>..</Value> 
     <Value>..</Value> 
    </Document> 
    <Document> 
     <Value>..</Value> 
    </Document> 
    <Document> 
     <Value>..</Value> 
     <Value>..</Value> 
    </Document> 
</File> 

ответ

3

Предполагая File элементом является текущий элемент контекста, вы можете использовать

max(Document/count(Value)) 

Document/count(Value) дает последовательность целых чисел (число Value детей каждого Document), max выбирает наибольшее значение из этой последовательности.

+0

Я пропустил узел. Но если все узлы значений были окружены одним узлом '' Я мог бы просто называть 'max (Документ/счет (узел/Значение))'? – iswinky

+0

@ iswinky да, это будет работать нормально. Если он слишком усложняется для одного выражения пути, вы можете использовать операцию явного определения последовательности ('для $ d в возврате документа .....') –

2

Вы можете использовать max(/File/Document/count(*)).

Смежные вопросы