XSLT:处理XML到CSV转换中的转义字符

时间:2018-07-26 10:52:09

标签: xml csv xslt

我创建了一个XSLT转换,以提取XML值并将其隐蔽为CSV。这种转换效果很好;但是,特定值具有我需要处理的转义字符。

我总共提取大约20个不同的值,并将它们输出为CSV中的单独字段。我只希望在三个字段中使用转义符(逗号,换行符和引号)。

下面是代码示例:

    

    <xsl:for-each select="metadata">
        <xsl:value-of select="concat('&quot;', (./Identifiers/Identifier/IDone), '&quot;')"/>
        <xsl:text>,</xsl:text>
        <xsl:value-of select="concat('&quot;', (./Identifiers/Identifier/IDtwo), '&quot;')"/>
        <xsl:text>,</xsl:text>
        <xsl:value-of select="concat('&quot;', string-join(./Identifiers/Identifier/IDthree, '|'), '&quot;')"/> 
        <xsl:text>,</xsl:text>
    </xsl:for-each>
</xsl:template>

在寻找解决方案后,我在下面看到了这个模板。任何有关如何最好地适应以下/应对这些逃生的建议,将不胜感激。

                <!-- Helper for escaping CSV field -->
                <xsl:template name="escape_quotes">
                    <xsl:param name="string" />

                    <xsl:value-of select="substring-before($string, '&quot;' )" />
                    <xsl:text>""</xsl:text>

                    <xsl:variable name="substring_after_first_quote" select="substring-after( $string, '&quot;' )" />

                    <xsl:choose>
                        <xsl:when test="not(contains( $substring_after_first_quote, '&quot;' ) )">
                            <xsl:value-of select="$substring_after_first_quote" />
                        </xsl:when>

                        <xsl:otherwise> 
                            <xsl:call-template name="escape_quotes">
                                <xsl:with-param name="string" select="$substring_after_first_quote"/>
                            </xsl:call-template>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:template>

0 个答案:

没有答案