记录计数函数返回非平坦目标消息的总数



我试图使用记录计数函数id将记录本身发生0到无界的子记录的数量映射到每个记录包含子记录数量的字段的消息:

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

然而,我当前的映射聚合了所有bar记录的计数,并在每个foobarcount中返回它。

示例源消息

<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>

我通过将记录计数函数id替换为调用XSLT模板脚本函数id来解决此问题。

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中的Id字段。

最新更新