任务是编写一个转换,以 HTML 文件和 CSV 文件的形式列出三个文件夹的内容。
HTML 部分已完成,我现在正在处理 CSV 部分。我设法在 CSV 中获得正确的输出,但是每条记录都在一列中,而不是每个值的新列中。这是我的代码的 CSV 部分:
<xsl:if test="report[contains(@output,'csv')]">
<xsl:result-document href="{$output_file_csv}" encoding="UTF-8" method="text">
<xsl:text>DAM, Titel, AutorIn, ISBN, EB Erstellt, Status, Duplikate</xsl:text>
<xsl:text>
</xsl:text>
<xsl:for-each select="$prod">
<xsl:variable name="DAM" select="replace(.,'^.+/(\d\d\d\d\d).+$','$1')"/>
<xsl:text>
</xsl:text>
<xsl:variable name="Titel" select="document(.)//*:title"/>
<xsl:text>
</xsl:text>
<xsl:variable name="AutorIn" select="document(.)//*:creator"/>
<xsl:text>
</xsl:text>
<xsl:variable name="ISBN" select="document(.)//*:source"/>
<xsl:text>
</xsl:text>
<xsl:variable name="EBErstellt" select="document(.)//*:date"/>
<xsl:text>
</xsl:text>
<xsl:variable name="Status" select="subsequence($status,number(replace(.,'^.+_(\d)%20PRODUKTION.+$','$1')),1)"/>
<xsl:variable name="Duplikate" select="if (count(index-of(document($prod)//*:source,document(.)//*:source)) > 1) then ', Duplikat' else ''"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="concat($DAM, ', ', $Titel, ', ', $AutorIn, ', ', $ISBN, ', ', $EBErstellt, ', ', $Status, $Duplikate)"></xsl:value-of>
<xsl:text>
</xsl:text>
</xsl:for-each>-->
</xsl:result-document>
</xsl:if>
</xsl:template>
任何人都可以帮助创建 CSV 标题并将每个值映射到相应的列吗?
有两件事:
首先,您在每列之间添加了一个新行
<xsl:text>
</xsl:text>
,而不是逗号:<xsl:text>,</xsl:text>
。
其次,您没有考虑到其中一个字段值包含换行符或逗号的可能性。对于字符串值列,您可以将它们括在双引号字符中,并使用 XPath
replace
函数转义这些字段值中存在的任何双引号。请参阅如何在 CSV 中正确转义双引号?