Я использую следующий XSL для преобразования XML в CSV на основе более раннего запроса SO.Соответствие шаблону XSLT для преобразования CSV
XML:
<Rows>
<Row>
<LoanNumber>123456</LoanNumber>
<DateReceived>2015-04-10</DateReceived>
<DateClosed>2015-04-10</DateClosed>
</Row>
<Row>
<LoanNumber>9988776</LoanNumber>
<DateReceived>2015-04-10</DateReceived>
<DateClosed/>
</Row>
</Rows>
XSL:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />
<xsl:template match="/*/child::*">
<xsl:for-each select="child::*">
<xsl:if test="position() = 1"><xsl:value-of select="normalize-space(.)"/>,OPEN,</xsl:if>
<xsl:if test="position() != 1 and position() != last()"><xsl:value-of select="normalize-space(.)"/>,</xsl:if>
<xsl:if test="position() = last()"><xsl:value-of select="normalize-space(.)"/><xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Я хотел бы иметь возможность вывести следующий CSV для указанных строк
123456, CLOSED, 2015-04-10, 2015-04-10
9988776, OPEN, 2015-04-10,
Я предположил, что я может достичь этого, имея 2 шаблона, один из которых выводит текст OPEN, где элемент <DateClosed>
является нулевым, а один выводит e текст ЗАКРЫТО, где нет.
Однако я не понимаю соответствия шаблона, которое использовалось достаточно хорошо, чтобы понять, как это сделать. Может ли это требование удовлетворяться даже в одном шаблоне?
Ожидается выход определенно правильно ваш? Не следует ли ЗАКРЫТЬ строку для 123456? –
Вы правы, спасибо. Отредактировано для исправления. –
@BenL Пожалуйста, не редактируйте код OP - вы не знаете, как он выглядит. –