У меня есть следующий XML (упрощение):
<?xml version="1.0" encoding="utf-8"?>
<TestCases>
<TestCase>
<Name>Test1</Name>
<Result>Failed</Result>
<Properties>
<Type>Type1</Type>
</Properties>
</TestCase>
<TestCase>
<Name>Test1</Name>
<Result>Failed</Result>
<Properties>
<Type>Type2</Type>
</Properties>
</TestCase>
<TestCase>
<Name>Test1</Name>
<Result>Passed</Result>
<Properties>
<Type>Type1</Type>
</Properties>
</TestCase>
</TestCases>
Мне интересно создать таблицу, которая подсчитывает количество пройденных / не пройденных тестовых случаев в соответствии с их типом, например так:
пройдено (Type1): 1
Ошибка (Тип 1): 1
Прошло (Другие типы): 0
Не удалось (Другие типы): 1
Для этого я пишу следующий запрос:
<xsl:value-of select="count(//TestCase[Result = 'Passed' and count(Properties/TestType='Type1')>0])"/>
<xsl:value-of select="count(//TestCase[Result = 'Failed' and count(Properties/TestType='Type1')>0])"/>
<xsl:value-of select="count(//TestCase[Result = 'Passed' and count(Properties/TestType='Type1')=0])"/>
<xsl:value-of select="count(//TestCase[Result = 'Failed' and count(Properties/TestType='Type1')=0])"/>
Как видите, много повторений кода, и было бы здорово, если бы я мог сохранить некоторые из них. Я понимаю, что в XSL 2.0 я мог бы использовать для этого пользовательские функции, но что мне делать в XSL 1.0? Видите ли вы какие-либо варианты оптимизации повторяющихся выражений?
P.S. Обратите внимание, что это упрощение реального, и хотя выражение здесь не кажется длинным, в реальном коде оно намного длиннее, поэтому необходимость вполне реальна.
Спасибо!