使用XSLT 1.0动态添加XML标签并实现Creditor条目去重咨询
XSLT 1.0 按AddressBookUID去重生成PolicyContactRoles节点实现方案
核心实现逻辑
XSLT 1.0 中针对指定字段去重需使用 Muenchian分组法,具体实现步骤如下:
- 定义索引key,将所有
Creditor节点按Contact/AddressBookUID字段分组 - 筛选每个分组下的第一个
Creditor节点,即可实现按UID去重 - 对筛选后的节点复用原有生成Entry的模板即可
完整XSLT代码
<!-- 首先在xsl:stylesheet根节点下新增key定义 --> <xsl:key name="creditor-by-uid" match="Creditor" use="Contact/AddressBookUID" /> <xsl:template match="PolicyContactRoles"> <xsl:copy> <!-- 仅选择每个UID分组下第一个出现的Creditor节点,实现去重 --> <xsl:apply-templates select="//Creditor[generate-id() = generate-id(key('creditor-by-uid', Contact/AddressBookUID)[1])]" mode="pcr"/> </xsl:copy> </xsl:template> <xsl:template match="Creditor" mode="pcr"> <Entry> <AccountContactRole> <Subtype>Creditor_De</Subtype> <AccountContact> <Contact> <xsl:copy-of select=".//AddressBookUID"/> </Contact> </AccountContact> </AccountContactRole> <Subtype>PolicyCreditor_De</Subtype> </Entry> </xsl:template>
逻辑说明
key('creditor-by-uid', Contact/AddressBookUID)会返回所有和当前节点AddressBookUID相同的Creditor节点集合generate-id()会为每个节点生成唯一标识,通过对比当前节点ID和同分组第一个节点的ID,即可筛选出每个UID对应的首个节点,自动跳过后续重复节点- 原有节点生成逻辑无需修改,即可输出符合要求的
PolicyContactRoles结构
内容的提问来源于stack exchange,提问作者Swathi Venigalla
相关产品推荐
相关产品推荐

