将计数器/序列号添加到 XSLT 中的 xml 字段

问题描述 投票:0回答:1

我正在使用以下代码将序列号添加到 /G_HL/S_HL 段,但不起作用。使用以下代码,我能够以正确的顺序填充 D_628,但无法以正确的顺序填充 D_734。 值应按顺序填充。分别以数字 1 和 0 开头。

源 XML 更新源 XML

<M_856>
    <G_HL>
        <S_HL>
            <D_628/>
            <D_734/>
            <D_735>O</D_735>
        </G_HL>
        <G_HL>
            <S_HL>
                <D_628/>
                <D_734/>
                <D_735>T</D_735>
            </S_HL>
        </G_HL>
        <G_HL>
            <S_HL>
                <D_628/>
                <D_734/>
                <D_735>T</D_735>
            </S_HL>
        </G_HL>
        <G_HL>
            <S_HL>
                <D_628/>
                <D_734/>
                <D_735>I</D_735>
            </S_HL>
        </G_HL>
        <G_HL>
            <S_HL>
                <D_628/>
                <D_734/>
                <D_735>I</D_735>
            </S_HL>
        </G_HL>
    </M_856>

所需输出

<M_856>
   <G_HL>
      <S_HL>
         <D_628>1<D_628/>
         <D_734>0<D_734/>
         <D_735>O</D_735>
   </G_HL>
   <G_HL>
      <S_HL>
         <D_628>2<D_628/>
         <D_734>1<D_734/>
         <D_735>T</D_735>
      </S_HL>
   </G_HL>
   <G_HL>
      <S_HL>
         <D_628>3<D_628/>
         <D_734>2<D_734/>
         <D_735>T</D_735>
      </S_HL>
   </G_HL>
   <G_HL>
      <S_HL>
        <D_628>4<D_628/>
        <D_734>3<D_734/>
         <D_735>I</D_735>
      </S_HL>
   </G_HL>
   <G_HL>
      <S_HL>
         <D_628>5<D_628/>
         <D_734>4<D_734/>
         <D_735>I</D_735>
      </S_HL>
   </G_HL>
</M_856>

XSLT 使用

<xsl:template match="M_856/G_HL/S_HL/D_628">
<xsl:copy>
<xsl:number count="M_856/G_HL/S_HL/D_628" start-at="1" level="any"/>
</xsl:copy>
</xsl:template>
<xsl:template match="M_856/G_HL/S_HL/D_734">
<xsl:copy>
<xsl:number count="M_856/G_HL/S_HL/D_734" start-at="0" level="any"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
xslt xslt-2.0
1个回答
0
投票

假设您只能访问不支持

start-at
(https://www.w3.org/TR/xslt20/#number) 的 XSLT 2 处理器,您可以使用

<xsl:variable name="pos" as="xs:integer"><xsl:number .../></xsl:variable>
<xsl:value-of select="$pos - 1"/>
© www.soinside.com 2019 - 2024. All rights reserved.