XSL как посчитать количество узлов в зависимости от значения без использования атрибутов? - PullRequest
5 голосов
/ 06 декабря 2010

Я провел исследование, но нашел только решения при работе с атрибутами.

Я недавно начал изучать XSL.Я хотел бы использовать его для преобразования моего файла XML в HTML.Данные, которые я хочу извлечь, должны представить, сколько узлов имеют определенное значение.

XML имеет следующую структуру:

<Tests>
    <Test>
        <TestName> a </TestName>
        <Date> 12.11.10 </Date>
        <Result> Fail </Result>
    </Test>
    <Test>
        <TestName> b </TestName>
        <Date> 13.11.10 </Date>
        <Result> Fail </Result>
    </Test>
    <Test>
        <TestName> c </TestName>
        <Date> 14.11.10 </Date>
        <Result> Pass </Result>
    </Test>
</Tests>

что я хочу получить как: 2 (количество ошибок)1 (количество пропусков)

Кто-нибудь может мне помочь с этим заданием?

Ответы [ 3 ]

11 голосов
/ 06 декабря 2010

Может быть:

<xsl:value-of select="count(Tests/Test[normalize-space(Result)='Fail'])" />
3 голосов
/ 06 декабря 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:key name="kTestByResult" match="Test" use="normalize-space(Result)"/>
    <xsl:template match="/">
        <xsl:value-of select="concat(count(key('kTestByResult','Fail')),
                                     ' (number of Fails) ',
                                     count(key('kTestByResult','Pass')),
                                     ' (number of Passes)')"/>
    </xsl:template>
</xsl:stylesheet>

Выход:

2 (number of Fails) 1 (number of Passes)
2 голосов
/ 06 декабря 2010
<xsl:value-of select="count(/Tests/Test/Result[normalize-space(text()) = 'Fail'])" />
<xsl:text> (number of Fails)</xsl:text>

<xsl:value-of select="count(/Tests/Test/Result[normalize-space(text()) = 'Pass'])" />
<xsl:text> (number of Passes)</xsl:text>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...