如何在XSLT的Foreach循环外获取变量值

时间:2019-11-18 14:15:41

标签: xslt+xml

  <Quote>    
        <xsl:variable name="ProductPos"></xsl:variable>
        <xsl:variable name="SubtotalPos"></xsl:variable>
        <xsl:for-each select="Configuration"> 

            <ConfigItem>
                <xsl:variable name="ConfigurationPos" select="position()*10"/> 
                 <xsl:for-each select="ProductLineItem">
                    <ProductLineItem>
                        <xsl:variable name="ProductPos" select="$ConfigurationPos+(position()*10)"/>
                        <ProductPostionNumber><xsl:value-of select = "$ProductPos" /></ProductPostionNumber>
                        </ProductLineItem>   
                    </xsl:for-each>
                <Subtotal><xsl:value-of select="$ProductPos"/></Subtotal>
            </ConfigItem>
        </xsl:for-each>
    </Quote>  

在上面的示例中,我需要用$ prodPos + 10填充小计标签值

1 个答案:

答案 0 :(得分:0)

您只需要对您的代码进行少量更改。如果不立即关闭标签,则可以写入变量。这样可以保留您的结构,但可以使用代码对其进行访问。

<xsl:variable name="content">
    <Configuration>
        <ProductLineItem></ProductLineItem>
    </Configuration>
    <Configuration>
        <ProductLineItem></ProductLineItem>
        <ProductLineItem></ProductLineItem>
    </Configuration>
</xsl:variable>
<Quote>    
    <xsl:variable name="GeneratedStructure">
        <xsl:for-each select="$content/Configuration"> 
            <ConfigItem>
                <xsl:variable name="ConfigurationPos" select="position()*10"/> 
                <xsl:variable name="ProductLineItem">
                    <xsl:for-each select="ProductLineItem">
                           <ProductLineItem>
                               <xsl:variable name="ProductPos" select="$ConfigurationPos+(position()*10)"/>
                               <ProductPostionNumber><xsl:value-of select = "$ProductPos" /></ProductPostionNumber>
                           </ProductLineItem>   
                       </xsl:for-each>
                </xsl:variable>
                <xsl:copy-of select="$ProductLineItem"/>
                <Subtotal><xsl:value-of select="sum($ProductLineItem/ProductLineItem/ProductPostionNumber)"/></Subtotal>
            </ConfigItem>
        </xsl:for-each>
    </xsl:variable>
    <xsl:copy-of select="$GeneratedStructure"/> <!-- This will output the content of the variable -->
    <xsl:for-each select="$GeneratedStructure/ConfigItem/Subtotal">
        <xsl:element name="Subtotal{position()}">
            <xsl:value-of select="number(.) + 10"/><!-- You did not specify if it should simply add 10 or add how often the for each loop repeats. Fix this for your needs. -->
        </xsl:element>
    </xsl:for-each>
</Quote>

当前输出:

<ConfigItem>
    <ProductLineItem>
        <ProductPostionNumber>20</ProductPostionNumber>
    </ProductLineItem>
    <Subtotal>20</Subtotal>
</ConfigItem>
<ConfigItem>
    <ProductLineItem>
        <ProductPostionNumber>30</ProductPostionNumber>
    </ProductLineItem>
    <ProductLineItem>
        <ProductPostionNumber>40</ProductPostionNumber>
    </ProductLineItem>
    <Subtotal>70</Subtotal>
</ConfigItem>
<Subtotal1>30</Subtotal1>
<Subtotal2>80</Subtotal2>

请考虑检查您的拼写,因为如果用其他名字来称呼它,很难理解您的意思。

编辑:我确实根据您的需要对其进行了编辑。虽然目前尚不清楚您到底想做什么。如果您向我显示一些输入和预期的输出,我可以解决此问题。