Xml XSLT2.0中静态和动态行的序列号

Xml XSLT2.0中静态和动态行的序列号,xml,xslt-2.0,Xml,Xslt 2.0,我试图用一些静态和动态行组合为输入xml生成序列号 输入xml:(已编辑) 我在xsl中尝试了以下内容: <xsl:for-each select="data"> <xsl:for-each select="line"> <xsl:value-of select="format-number(position(),"00000")"/> <xsl:value-of select="."/> <xsl:tex

我试图用一些静态和动态行组合为输入xml生成序列号

输入xml:(已编辑)

我在xsl中尝试了以下内容:

<xsl:for-each select="data">
   <xsl:for-each select="line">
     <xsl:value-of select="format-number(position(),"00000")"/>
     <xsl:value-of select="."/>
     <xsl:text>%#x0A</xsl:text>
   </xsl:for-each>
   <xsl:value-of select="format-number(position(),"00000")"/>
   <xsl:text>static1</xsl:text>
   <xsl:text>%#x0A</xsl:text>
   <xsl:value-of select="format-number(position(),"00000")"/>
   <xsl:text>static2</xsl:text>
   <xsl:text>%#x0A</xsl:text>
   <xsl:value-of select="format-number(position(),"00000")"/>
   <xsl:text>static3</xsl:text>
   <xsl:text>%#x0A</xsl:text>
</xsl:for-each>

%#x0A
静态1
%#x0A
静态2
%#x0A
静力学3
%#x0A
但根据我的xsl,我无法连续为所有行生成序列号。请帮我找出背后的逻辑

这个XSLT会做什么:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="/*">
        <xsl:apply-templates select=".//line"/>
    </xsl:template>

    <xsl:template match="line">
        <xsl:variable name="pos" select="position() + (3 * count(preceding::data))"/>
        <xsl:value-of select="concat(format-number($pos, '00000 '), ., '&#xa;')"/>
    </xsl:template>

    <xsl:template match="data/line[last()]">
        <xsl:variable name="pos" select="position() + (3 * count(preceding::data))"/>
        <xsl:value-of select="concat(format-number($pos, '00000 '), ., '&#xa;')"/>
        <xsl:value-of select="concat(format-number($pos+1, '00000 '), 'static1', '&#xa;')"/>
        <xsl:value-of select="concat(format-number($pos+2, '00000 '), 'static2', '&#xa;')"/>
        <xsl:value-of select="concat(format-number($pos+3, '00000 '), 'static3', '&#xa;')"/>
    </xsl:template>

</xsl:stylesheet>


Hi,感谢您的解决方案,我已经准确地编辑了输入xml,因为您的解决方案也在循环所有其他标记,并为它们生成序列号。但我只需要考虑“行”标签。如何动态生成。假设我们有3次或5次。所以请帮助我
<xsl:for-each select="data">
   <xsl:for-each select="line">
     <xsl:value-of select="format-number(position(),"00000")"/>
     <xsl:value-of select="."/>
     <xsl:text>%#x0A</xsl:text>
   </xsl:for-each>
   <xsl:value-of select="format-number(position(),"00000")"/>
   <xsl:text>static1</xsl:text>
   <xsl:text>%#x0A</xsl:text>
   <xsl:value-of select="format-number(position(),"00000")"/>
   <xsl:text>static2</xsl:text>
   <xsl:text>%#x0A</xsl:text>
   <xsl:value-of select="format-number(position(),"00000")"/>
   <xsl:text>static3</xsl:text>
   <xsl:text>%#x0A</xsl:text>
</xsl:for-each>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="/*">
        <xsl:apply-templates select=".//line"/>
    </xsl:template>

    <xsl:template match="line">
        <xsl:variable name="pos" select="position() + (3 * count(preceding::data))"/>
        <xsl:value-of select="concat(format-number($pos, '00000 '), ., '&#xa;')"/>
    </xsl:template>

    <xsl:template match="data/line[last()]">
        <xsl:variable name="pos" select="position() + (3 * count(preceding::data))"/>
        <xsl:value-of select="concat(format-number($pos, '00000 '), ., '&#xa;')"/>
        <xsl:value-of select="concat(format-number($pos+1, '00000 '), 'static1', '&#xa;')"/>
        <xsl:value-of select="concat(format-number($pos+2, '00000 '), 'static2', '&#xa;')"/>
        <xsl:value-of select="concat(format-number($pos+3, '00000 '), 'static3', '&#xa;')"/>
    </xsl:template>

</xsl:stylesheet>