2016-06-26 14 views
0

一部のXSLレポートで問題が発生しています。基本的には、私はCSVにすべてを吐き出していますが、この部分はうまくいきますが、時には同じセルに2つの値を渡す必要があります。XSLを使用したCSVセルでのキャリッジリターン

私は、しかし、彼らは常に異なった細胞で終わる、2つの項目間の<xsl:text>&#10;</xsl:text><xsl:text>&#13;</xsl:text>を置く、ライン間<br />を置く、<p>タグ内の各文字列を入れて試してみました。

2つ以上のアイテムを1つのセルに入れ、各アイテム間に復帰するXSLの部分は次のとおりです。

<xsl:template name="replace-string"> 
<xsl:param name="text"/> 
<xsl:param name="replace"/> 
<xsl:param name="with"/> 
<xsl:choose> 
    <xsl:when test="contains($text,$replace)"> 
    <xsl:value-of select="substring-before($text,$replace)"/> 
    <xsl:value-of select="$with"/> 
    <xsl:call-template name="replace-string"> 
     <xsl:with-param name="text" 
      select="substring-after($text,$replace)"/> 
     <xsl:with-param name="replace" select="$replace"/> 
     <xsl:with-param name="with" select="$with"/> 
    </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:value-of select="$text"/> 
    </xsl:otherwise> 
</xsl:choose> 

<xsl:template name="getRoutingRules"> 
<xsl:param name="itemID" /> 
<xsl:for-each select="/aka-Architect/Schema/Relationships/OwnerTerm[@ID=$itemID]"> 
    <xsl:if test="@Entity='Subject'"> 
    <xsl:for-each select="./Routing_Rules/*"> 
     <xsl:if test="@Entity='Routing Rules'"> 
      <xsl:call-template name="replace-string"> 
      <xsl:with-param name="text" select="@Name"/> 
      <xsl:with-param name="replace" select="'&quot;'" /> 
      <xsl:with-param name="with" select="''" /> 
      </xsl:call-template> 
     <br /> 
     <xsl:text> 
     </xsl:text> 
     </xsl:if> 

    </xsl:for-each> 
    </xsl:if> 
</xsl:for-each> 

全XSLは

<?xml version="1.0"?> 
<!--CSV--> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s="http://www.stylusstudio.com/xquery"> 
<xsl:template match="/aka-Architect"> 
<html> 
    <head/> 
    <body> 

    <xsl:apply-templates select="Schema/Hierarchy/TopTerm"/> 
    <!--xsl:apply-templates/--> 
    </body> 
</html> 
</xsl:template> 

<xsl:template name="GetTopTerm" match="Schema/Hierarchy/TopTerm"> 
<table> 
    <tr> 
    <td> 
     <xsl:text>BCS Path</xsl:text> 
    </td> 
    <td> 
     <xsl:text>Descriptor</xsl:text> 
    </td> 
    <td> 
     <xsl:text>Descriptor Type</xsl:text> 
    </td> 
    <td> 
     <xsl:text>Description</xsl:text> 
    </td> 
    <td> 
     <xsl:text>Routing Rules</xsl:text> 
    </td> 
    </tr> 
    <!--<xsl:call-template name="GetFunctions" /> 
    <xsl:call-template name="GetActivities" />--> 
    <xsl:call-template name="GetSubjects" /> 
</table> 
</xsl:template> 



<!---Get Function --> 
<xsl:template name="GetFunctions"> 
<xsl:for-each select="/aka-Architect/Entities/Function/Items"> 
    <xsl:for-each select="./*"> 
    <tr> 
     <td> 
     <xsl:value-of select=".//ixPath" /> 
     </td> 
     <td> 
     <xsl:value-of select=".//Name"/> 
     </td> 
     <td> 
     <xsl:value-of select=".//BCSLevel"/> 
     </td> 
     <td> 
     <xsl:value-of select=".//Description"/> 
     </td> 
    </tr> 
    </xsl:for-each> 
</xsl:for-each> 
</xsl:template> 


<!---Get Activity --> 
<xsl:template name="GetActivities"> 
<xsl:for-each select="/aka-Architect/Entities/Activity/Items"> 
    <xsl:for-each select="./*"> 
    <tr> 
     <td> 
     <xsl:value-of select=".//ixPath" /> 
     </td> 
     <td> 
     <xsl:value-of select=".//Name"/> 
     </td> 
     <td> 
     <xsl:value-of select=".//BCSLevel"/> 
     </td> 
     <td> 
     <xsl:value-of select=".//Description"/> 
     </td> 
    </tr> 
    </xsl:for-each> 
</xsl:for-each> 
</xsl:template> 

<!---Get Subject --> 
<xsl:template name="GetSubjects"> 
<xsl:for-each select="/aka-Architect/Entities/Subject/Items"> 
    <xsl:for-each select="./*"> 
    <tr> 
     <td> 
     <xsl:value-of select=".//ixPath" /> 
     </td> 
     <td> 
     <xsl:value-of select=".//Name"/> 
     </td> 
     <td> 
     <xsl:value-of select=".//BCSLevel"/> 
     </td> 
     <td> 
     <xsl:value-of select=".//Description"/> 
     </td> 
     <td> 
     <xsl:call-template name="getRoutingRules"> 
      <xsl:with-param name="itemID" select='@ID' /> 
     </xsl:call-template> 
     </td> 
    </tr> 
    </xsl:for-each> 
</xsl:for-each> 
</xsl:template> 



<!-- FIND ROUTING RULES --> 
<xsl:template name="getRoutingRules"> 
<xsl:param name="itemID" /> 
<xsl:for-each select="/aka-Architect/Schema/Relationships/OwnerTerm[@ID=$itemID]"> 
    <xsl:if test="@Entity='Subject'"> 
    <xsl:for-each select="./Routing_Rules/*"> 
     <xsl:if test="@Entity='Routing Rules'"> 
     <p> 
      <xsl:call-template name="replace-string"> 
      <xsl:with-param name="text" select="@Name"/> 
      <xsl:with-param name="replace" select="'&quot;'" /> 
      <xsl:with-param name="with" select="''" /> 
      </xsl:call-template> 
     </p> 
     <xsl:text> 
     </xsl:text> 
     </xsl:if> 

    </xsl:for-each> 
    </xsl:if> 
</xsl:for-each> 
</xsl:template> 


<!-- replace " with ' --> 
<xsl:template name="replace-string"> 
<xsl:param name="text"/> 
<xsl:param name="replace"/> 
<xsl:param name="with"/> 
<xsl:choose> 
    <xsl:when test="contains($text,$replace)"> 
    <xsl:value-of select="substring-before($text,$replace)"/> 
    <xsl:value-of select="$with"/> 
    <xsl:call-template name="replace-string"> 
     <xsl:with-param name="text" 
      select="substring-after($text,$replace)"/> 
     <xsl:with-param name="replace" select="$replace"/> 
     <xsl:with-param name="with" select="$with"/> 
    </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:value-of select="$text"/> 
    </xsl:otherwise> 
</xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 
<!-- (c) 2016. CorpMem Business Solutions. All rights reserved.--> 

どれを下回っていると、すべてのヘルプは大歓迎です。

乾杯、 ジョン

EDIT:要求で全XSLを追加しました。

+0

あなたの質問はCSVですが、あなたのコードはHTMLテーブルを生成します。これらは2つの非常に異なるものです.HTMLで "キャリッジリターン"を生成するには、 '
'を出力する必要があります。 –

+0

@ michael.hor257k彼らは非常に異なっています、はい、私はどのようにこのすべての作品が、私はHTMLテーブルのタグを使用しない場合はすべてが1つのセルに詰め込まれています。私は '
'を試しましたが、これはすべてを以下の新しいセルに置きます。 – JohZant

+0

あなたが何を記述しているのか分かりません。結果をブラウザに表示されるHTMLページにするには、HTMLテーブルタグを使用する必要があります。 .csvテキストファイルが必要な場合は、直接作成しないでください。あなたの処理チェーンに残しておいたものがあるようです。 –

答えて

0

specificationより。

改行(CRLF)、二重引用符、およびコンマ を含む
  • フィールドは二重引用符で囲まれなければなりません。たとえば:

    "AAA"、 "B CRLF

    BB"、 "CCC" CRLF

    zzzは、YYY、だから、あなただけを確認する必要があり

  • をxxxはあなたのセルは引用符で区切られ、その中に改行を入れることができます。

    +0

    引用符を追加すると、引用符が画面に表示されます。私がCSVのセルにデータを置くことができる唯一の方法は、私のXSLでHTML Table Elementsを使うことです。 – JohZant

    +0

    これは、CSVを作成するときにCSVライブラリのジョブを追加するためです。コードを追加する必要があります。 – Getkey

    +0

    XSLを追加しました。うまくいけば助けてくれます。私がそれに引用符を追加したときに画面に表示されます。 – JohZant

    関連する問題