<xsl:for-each>重复第一行

时间:2016-12-29 17:41:15

标签: xslt xslt-1.0

以下是我的XML的样子。我也在下面复制了XSLT和输出。我的问题是,输出总是重复相同的第一行。如果我在输入XML文件中添加更多行,那么第一行将在输出文件中重复添加的行数。可能是什么原因?

XML:

<Loans>
    <Loan>
        <loan_number>123</loan_number>
        <loan_aqn_date>08-01-2016</loan_number>
    </Loan>
    <Loan>
        <loan_number>456</loan_number>
        <loan_aqn_date>10-01-2016</loan_number>
    </Loan>
    <Loan>
        <loan_number>789</loan_number>
        <loan_aqn_date>12-01-2016</loan_number>
    </Loan>
</Loans>

输出:

loan_number|loan_aqn_date|
123|08-01-2016|
123|08-01-2016|
123|08-01-2016|

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" />
    <xsl:template match="/">
        <xsl:text>loan_number|loan_aqn_date|</xsl:text>
        <xsl:for-each select="/Loans/Loan">
            <xsl:value-of select="concat(/Loans/Loan/loan_number,'|')" />
            <xsl:value-of select="concat(/Loans/Loan/loan_aqn_date,'|')" />
        </xsl:for-each>
    </xsl:template>    
</xsl:stylesheet>

2 个答案:

答案 0 :(得分:1)

您正在使用“select”内部循环的绝对路径。 试试这个:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:template match="/">
        <xsl:text>loan_number|loan_aqn_date|</xsl:text>
        <xsl:for-each select="/Loans/Loan">
            <xsl:value-of select="concat(loan_number,'|')" />
            <xsl:value-of select="concat(loan_aqn_date,'|')" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

用模板替换<for-each>可以使您的方法更加通用。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" />
  <xsl:strip-space elements="Loans" />     <!-- Removes surrounding spaces -->

  <xsl:template match="/Loans">
    <xsl:text>loan_number|loan_aqn_date|&#10;</xsl:text>
    <xsl:apply-templates />                <!-- Processes 'Loan' nodes -->
  </xsl:template>    

  <xsl:template match="Loan">
    <xsl:value-of select="concat(loan_number, '|', loan_aqn_date,'|')" />
    <xsl:text>&#10;</xsl:text>             <!-- Adds newlines -->
  </xsl:template>    
</xsl:stylesheet>

<强>输出:

loan_number|loan_aqn_date|
123|08-01-2016|
456|10-01-2016|
789|12-01-2016|
相关问题