2012-02-21 7 views
13

データをJQueryで受け入れられる形式に変換する次のxsltがあります。XSLT +二重引用符をエスケープシーケンスに置き換えます。

<?xml version="1.0" encoding="UTF-8"?> 
<Rowsets> 
    <Rowset> 
     <Columns> 
      <Column Description="Element_1" SQLDataType="12" /> 
      <Column Description="Element_2" SQLDataType="12" /> 
      <Column Description="Element_3" SQLDataType="93" /> 
     </Columns> 
     <Row> 
      <Element_1>test_data</Element_1> 
      <Element_2>test_quo"te</Element_2> 
      <Element_3>test_data</Element_3> 
     </Row> 
    </Rowset> 
</Rowsets> 

現在のXSLT:

<?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:param> 
    <xsl:param name="RowLast">]</xsl:param> 
    <xsl:param name="RowStart">[</xsl:param> 
    <xsl:param name="startBracket">{ </xsl:param> 
    <xsl:param name="JQTableData">"aaData": [</xsl:param> 
    <xsl:param name="JQTableEnd">] }</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:for-each select="Rowset"> 
      <xsl:value-of select="$startBracket"/> 
      <xsl:value-of select="$JQTableData"/> 
       <xsl:variable name="CurrentColumns" select="Columns"/> 
       <xsl:for-each select="Columns"> 
        <xsl:for-each select="Column"> 

         <xsl:if test="not(position() = last())"> 

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

       </xsl:for-each> 
       <xsl:for-each select="Row"> 
       <xsl:value-of select="$RowStart"/> 
        <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'"> 
           <xsl:value-of select="."/> 
          </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:otherwise> 
             </xsl:choose> 
            </xsl:when> 
            <xsl:otherwise> 
            <xsl:choose> 
             <xsl:when test=". = 'true'"> 
              <xsl:text>Y</xsl:text> 
             </xsl:when> 
             <xsl:when test=". = 'false'"> 
              <xsl:text>N</xsl:text> 
             </xsl:when> 
             <xsl:otherwise> 
              <xsl:value-of select="."/> 
             </xsl:otherwise> 
             </xsl:choose> 
            </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:if test="not(position() = last())"> 
          <xsl:value-of select="$RowDelim"/> 
         </xsl:if> 
          <xsl:if test="position() = last()"> 
          <xsl:value-of select="$RowLast"/> 
         </xsl:if> 

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



</xsl:stylesheet> 
JSONはデータ文字列に二重引用符を受け入れていないのでしかし、私は

XML "\エスケープシーケンスで" 交換する必要があります

電流出力:

{ "aaData": [["test_data","test_quo"te","test_data"]] } 

所望の出力:

{ "aaData": [["test_data","test_quo\"te","test_data"]] } 
+0

user1130511:エスケープ文字「\」(バックスラッシュ)はありませんか? –

+0

user1130511:提供されたXSLTコードは整形されておらず、今は誰もそれを扱うことができません。質問を編集して修正してください。 –

+0

@DimitreNovatchev woops、間違ったバージョンをコピーしました。 XSLTを更新しました。これはうまくいくはずです。そしてはい、それはバックスラッシュでなければなりません – user1130511

答えて

関連する問題