如何处理具有相同匹配项的 XSLT 多个模板?
How to deal with XSLT Multiple templates with same match?
其中有 4 类。每个类别都有自己给定的结构。为此,我定义了 4 个不同的模板。
两个类别使用相同的结构,它们仅在某些元素上不同。所以它们被解析为相同的匹配项。
这里是部分 XSLT 文件。
<xsl:template match="pr:objects/pr:act/">
<entry>
<per_type_crm_de>
<xsl:value-of select="pr:act_type_crm/pr:act_type_crm/pr:_standard/pr:de-DE"/>
</per_type_crm_de>
<per_type_crm_en>
<xsl:value-of select="pr:act_type_crm/pr:act_type_crm/pr:_standard/pr:en-US"/>
</per_type_crm_en>
<per_type_crm_it>
<xsl:value-of select="pr:act_type_crm/pr:act_type_crm/pr:_standard/pr:it-IT"/>
</per_type_crm_it>
<per_type_crm_fr>
<xsl:value-of select="pr:act_type_crm/pr:act_type_crm/pr:_standard/pr:fr-FR"/>
</per_type_crm_fr>
<per_uuid>
<xsl:value-of select="pr:_uuid"/>
</per_uuid>
<per_nc_name>
<xsl:value-of select="pr:act_nc_name"/>
</per_nc_name>
</entry>
</xsl:template>
<xsl:template match="pr:objects/pr:act">
<entry>
<grp_system_object_id>
<xsl:value-of select="pr:_system_object_id"/>
</grp_system_object_id>
<grp_last_modified>
<xsl:value-of select="pr:act_last_modified"/>
</grp_last_modified>
<_uuid>
<xsl:value-of select="pr:_uuid"/>
</_uuid>
<grp_nc_name>
<xsl:value-of select="pr:act_nc_name"/>
</grp_nc_name>
<grp_nc_name_lang_akronym>
<xsl:value-of select="pr:act_nc_name_lang/pr:generic_lang/pr:generic_lang_akronym"/>
</grp_nc_name_lang_akronym>
</entry>
</xsl:template>
因此我得到的结果是 xml 指的是第一个模板匹配被正确解析和分类,而指的是第二个模板的 xml 根本没有被解析。
我该如何处理这个问题?通过使用两个类别之间不同的元素结构 id
(下图)作为第二个匹配选项可以解决问题吗?
<per_uuid>
<xsl:value-of select="pr:_uuid"/>
</per_uuid>
如果是这样,我如何定义多个匹配选项?
此致
如果不查看输入数据,很难真正理解您要做什么,但我猜您想像这样区分您的两个模板:
<xsl:template match="pr:objects/pr:act[pr:_uuid='someValue1']">
...
</xsl:template>
和
<xsl:template match="pr:objects/pr:act[pr:_uuid='someValue2']">
...
</xsl:template>
其中有 4 类。每个类别都有自己给定的结构。为此,我定义了 4 个不同的模板。 两个类别使用相同的结构,它们仅在某些元素上不同。所以它们被解析为相同的匹配项。
这里是部分 XSLT 文件。
<xsl:template match="pr:objects/pr:act/">
<entry>
<per_type_crm_de>
<xsl:value-of select="pr:act_type_crm/pr:act_type_crm/pr:_standard/pr:de-DE"/>
</per_type_crm_de>
<per_type_crm_en>
<xsl:value-of select="pr:act_type_crm/pr:act_type_crm/pr:_standard/pr:en-US"/>
</per_type_crm_en>
<per_type_crm_it>
<xsl:value-of select="pr:act_type_crm/pr:act_type_crm/pr:_standard/pr:it-IT"/>
</per_type_crm_it>
<per_type_crm_fr>
<xsl:value-of select="pr:act_type_crm/pr:act_type_crm/pr:_standard/pr:fr-FR"/>
</per_type_crm_fr>
<per_uuid>
<xsl:value-of select="pr:_uuid"/>
</per_uuid>
<per_nc_name>
<xsl:value-of select="pr:act_nc_name"/>
</per_nc_name>
</entry>
</xsl:template>
<xsl:template match="pr:objects/pr:act">
<entry>
<grp_system_object_id>
<xsl:value-of select="pr:_system_object_id"/>
</grp_system_object_id>
<grp_last_modified>
<xsl:value-of select="pr:act_last_modified"/>
</grp_last_modified>
<_uuid>
<xsl:value-of select="pr:_uuid"/>
</_uuid>
<grp_nc_name>
<xsl:value-of select="pr:act_nc_name"/>
</grp_nc_name>
<grp_nc_name_lang_akronym>
<xsl:value-of select="pr:act_nc_name_lang/pr:generic_lang/pr:generic_lang_akronym"/>
</grp_nc_name_lang_akronym>
</entry>
</xsl:template>
因此我得到的结果是 xml 指的是第一个模板匹配被正确解析和分类,而指的是第二个模板的 xml 根本没有被解析。
我该如何处理这个问题?通过使用两个类别之间不同的元素结构 id
(下图)作为第二个匹配选项可以解决问题吗?
<per_uuid>
<xsl:value-of select="pr:_uuid"/>
</per_uuid>
如果是这样,我如何定义多个匹配选项?
此致
如果不查看输入数据,很难真正理解您要做什么,但我猜您想像这样区分您的两个模板:
<xsl:template match="pr:objects/pr:act[pr:_uuid='someValue1']">
...
</xsl:template>
和
<xsl:template match="pr:objects/pr:act[pr:_uuid='someValue2']">
...
</xsl:template>