Функтоид Record Count возвращает совокупное количество целевых сообщений, не являющихся плоскими - PullRequest
0 голосов
/ 20 октября 2011

Я попытался использовать функтоид Количество записей , чтобы сопоставить число вложенных записей самой записи, которая происходит от 0, до неограниченного сообщения, где каждая запись содержит поле, содержащее число вложенных записей :

root+                           +root
    |                           |
    +foo+                   +foo+
        |                   |
        +bar+ -RecordCount- barcount
            |
            +xyz

Однако моя текущая карта объединяет количество всех bar записей и возвращает его в каждом foo\barcount.

Пример исходного сообщения

<root>
    <foo>
        <Id>1</Id>
        <bar>
            <xyz />
        </bar>
        <bar>
            <xyz />
        </bar>
    </foo>
    <foo>
        <Id>2</Id>
        <bar>
            <xyz />
        </bar>
        <bar>
            <xyz />
        </bar>
    </foo>
</root>

... и результат

<root>
    <foo>
        <Id>1</Id>
        <barcount>4</barcount>
    </foo>
    <foo>
        <Id>2</Id>
        <barcount>4</barcount>
    </foo>
</root>

... тогда как я ожидал

<root>
    <foo>
        <Id>1</Id>
        <barcount>2</barcount>
    </foo>
    <foo>
        <Id>2</Id>
        <barcount>2</barcount>
    </foo>
</root>

1 Ответ

0 голосов
/ 20 октября 2011

Я решил эту проблему, заменив Число записей функтоидом на Call XSLT Scripting Template functoid.

Шаблон XSLT выглядит так:

<xsl:template name="CountMyBar">
    <xsl:param name="fooId" />
    <xsl:element name="barcount">
        <xsl:value-of select="count(//foo[Id=$fooId]/bar)" />
    </xsl:element>
</xsl:template>

, а вход для скриптового функтоида - поле Id из foo.

...