Проблема XSL-преобразования новой строки в разделителях строк - PullRequest
0 голосов
/ 13 декабря 2018

У меня проблема с конвертацией в CSV.Именно с $ RowDelim в XSL-преобразовании.Как вы можете видеть ниже, разделитель строк равен 
.Все хорошо до того момента, как в какой-то строке строки вдруг появился enter, чем он реагирует как новая строка, но для меня это неправильное поведение.Вы знаете подходящий метод для этого?Я пробовал много разных, иногда, может быть, неправильно, но это не работает

Текущее дерево XML:

<Rowsets>
<Rowset>
    <Columns>
        <Column Description="id" MaxRange="1" MinRange="0" Name="id" SQLDataType="-5" SourceColumn="id"/>
        <Column Description="Note" MaxRange="1" MinRange="0" Name="Note" SQLDataType="-9" SourceColumn="Note"/>
    </Columns>
    <Row>
    <id>9</id>
    <Note>Normal string without enter in string look like this</Note>
    </Row>
    <Row>
    <id>9</id>
    <Note>
    String with enter look like this
    </Note>
    </Row>
</Rowset>

Я знаю, что мне нужно изменить именно эту часть:

<xsl:for-each select="Row">

остаток кода

<xsl:value-of select="$RowDelim"/>
</xsl:for-each>

Ниже завершено преобразование XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java">
<xsl:output method="text" media-type="text/csv" encoding="UTF-8"/>
<xsl:param name="RowDelim">
    <xsl:text>&#xA;</xsl:text>
</xsl:param>
<xsl:param name="FieldDelim">,</xsl:param>
<xsl:param name="StringDelim">"</xsl:param>
<xsl:param name="DateFormat">yyyy-MM-dd HH:mm:ss</xsl:param>

<xsl:template match="/">
    <xsl:for-each select="Rowsets">
        <xsl:call-template name="PrintFatalError"/>
        <xsl:for-each select="Rowset">
            <xsl:variable name="CurrentColumns" select="Columns"/>
            <xsl:for-each select="Columns">
                <xsl:for-each select="Column">
                    <xsl:value-of select="$StringDelim"/>
                    <xsl:value-of select="@Name"/>
                    <xsl:value-of select="$StringDelim"/>
                    <xsl:if test="not(position() = last())">
                        <xsl:value-of select="$FieldDelim"/>
                    </xsl:if>
                </xsl:for-each>
                <xsl:value-of select="$RowDelim"/>
            </xsl:for-each>
            <xsl:for-each select="Row">
                <xsl:for-each select="*">
                    <xsl:variable name="ColName">
                        <xsl:value-of select="name(.)"/>
                    </xsl:variable>
                    <xsl:variable name="ColType">
                        <xsl:value-of select="$CurrentColumns/Column[@Name=$ColName]/@SQLDataType"/>
                    </xsl:variable>
                    <xsl:choose>
                        <xsl:when test="$ColType= '2' or $ColType= '3' or $ColType= '4' or $ColType= '5' or $ColType= '6' or $ColType= '7' or $ColType= '8' or $ColType= '-7' or $ColType ='-5' or $ColType ='-3' or $ColType ='-4' or $ColType ='-2'">
                                <xsl:choose>
                                    <xsl:when test=". = 'NA'">
                                        <xsl:value-of select="''"/>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <xsl:value-of select="."/>
                                    </xsl:otherwise>
                                </xsl:choose>
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:value-of select="$StringDelim"/>
                            <xsl:choose>
                                <xsl:when test="$ColType= '91' or $ColType= '92' or $ColType= '93'">
                                    <xsl:choose>
                                        <xsl:when test=". = 'TimeUnavailable'">
                                            <xsl:value-of select="''"/>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:value-of select="java:com.sap.xmii.Illuminator.ext.ExtFunctions.dateFromXMLFormat(string(.),$DateFormat)"/>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:value-of select="."/>
                                </xsl:otherwise>
                            </xsl:choose>
                            <xsl:value-of select="$StringDelim"/>
                        </xsl:otherwise>
                    </xsl:choose>
                    <xsl:if test="not(position() = last())">
                        <xsl:value-of select="$FieldDelim"/>
                    </xsl:if>
                </xsl:for-each>
                <xsl:value-of select="$RowDelim"/>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:for-each>
</xsl:template>
<xsl:template name="PrintFatalError">
    <xsl:for-each select="FatalError">
        <xsl:text>Fatal Error - </xsl:text>
        <xsl:value-of select="."/>
        <xsl:value-of select="$RowDelim"/>
    </xsl:for-each>
</xsl:template>

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...