2016-12-29 6 views
1

Ниже приведен пример моего XML. Я также скопировал XSLT и вывел ниже. Моя проблема в том, что вывод всегда повторяется в той же первой строке. Если я добавлю больше строк для ввода файла XML, то первая строка будет повторяться в выходном файле для того, чтобы добавить много строк. Что может быть причиной?<xsl: for-each> повторяет первую строку

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> 
+0

Быстрая коррекция: Я пропустил закрытие ">" для "» в моем XML-файле – Pushpa

+0

Я исправил это в редактировании. – zx485

+0

По-прежнему существует несоответствие между тегами открытия и закрытия '' 12-01-2016' '. – zx485

ответ

1

Вы используете абсолютный путь "выберите" внутри цикла. Попробуйте это:

<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> 
+0

Абсолютный путь был проблемой. Я удалил его и сохранил имена атрибутов. Теперь он отлично работает с каждым. Большое спасибо Рафаэль З. – Pushpa

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| 
Смежные вопросы