我试图使用记录计数函数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
字段。