小编JB.*_*JB.的帖子

XSLT使用generate-id()在子组内进行分组会丢弃先前组中的重复键

当我需要的密钥可以从输入文件中跨组重复时,我无法生成汇总组.我正在使用muenchian方法进行分组,因为我坚持使用xslt 1.0,我无法更改输入模式.

<groups>
 <group id="1">
     <members>
         <member name="A">
           <udf @name="key">1</customId> 
         </member>
         <member name="B">
           <udf @name="key">1</customId> 
         </member>
     </members>
 </group>
 <group id="2">
     <members>
         <member name="C">
           <udf @name="key">1</customId> 
         </member>
         <member name="D">
           <udf @name="key">2</customId> 
         </member>
         <member name="E">
           <udf @name="key">3</customId> 
         </member>
     </members>
 </group>
</groups>
Run Code Online (Sandbox Code Playgroud)

我想要产生的输出是:

<group id="1">
    <member key="1" />
</group>
<group id="2">
    <member key="1" />
    <member key="2" />
    <member key="3" />
</group>
Run Code Online (Sandbox Code Playgroud)

我也在对每个元素进行其他处理,但这是切向的.

我有一个运行循环并生成密钥的模板:

<xsl:tempalte name="process">
   <xsl:for-each select="groups/group">
      <xsl:call-template name="getMembers"/>
   </xsl:for-each>
</xsl:tempalte>

<xsl:key name="keyId" match="member" use="udf/@name[.='key']/.."/>

<xsl:template name="getMembers>
    <xsl:for-each select="members/member[generate-id() = generate-id(key('keyId',udf/@name[.='key']/..))]">
      <!-- emits …
Run Code Online (Sandbox Code Playgroud)

xslt xslt-1.0

4
推荐指数
1
解决办法
3098
查看次数

标签 统计

xslt ×1

xslt-1.0 ×1