2016-12-28 5 views
1

データから作成したいのですが、JSONテンプレートがあり、バージョン1.0しか使用できません。問題は二重引用符をエスケープしない方法です。XLST 1.0アトリビュートエスケープダブル引用符を選択

値の選択属性で吹き出し引用符からエスケープしたいです。

私はこれをどのようにしているのですか?または私にいくつかの指摘を与える。

そして私はあなたが再帰的に名前のテンプレートを呼び出すことができXSLT 1.0(不潔)では、バージョン1.0

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="text" omit-xml-declaration="yes" indent="no"/> 
    <xsl:template match="m4n">{ 
"data":[<xsl:for-each select="data/record"> 
     {"url":"<xsl:value-of select="./column[@name='url']"/>", 
     "title":"<xsl:value-of select="./column[@name='title']"/>", 
     "description":"<xsl:value-of select="./column[@name='description']"/>", 
     "offerid":"<xsl:value-of select="./column[@name='offerid']"/>", 
     "image":"<xsl:value-of select="./column[@name='image']"/>", 
     "price":"<xsl:value-of select="./column[@name='price']"/>", 
     "price_old":"<xsl:value-of select="./column[@name='price_old']"/>", 
     "category":"<xsl:value-of select="./column[@name='category']"/>", 
     "subcategory":"<xsl:value-of select="./column[@name='subcategory']"/>", 
     "stock":"<xsl:value-of select="./column[@name='stock']"/>", 
     "timetoship":"<xsl:value-of select="./column[@name='timetoship']"/>", 
     "price_shipping":"<xsl:value-of select="./column[@name='price_shipping']"/>", 
     "ean":"<xsl:value-of select="./column[@name='ean']"/>", 
     "vendor":"<xsl:value-of select="./column[@name='vendor']"/>", 
     "category_path":"<xsl:value-of select="./column[@name='category_path']"/>", 
     "description2":"<xsl:value-of select="./column[@name='description2']"/>", 
     "largeimage":"<xsl:value-of select="./column[@name='largeimage']"/>", 
     "model":"<xsl:value-of select="./column[@name='model']"/>", 
     "thirdcategory":"<xsl:value-of select="./column[@name='thirdcategory']"/>", 
     "column1":"<xsl:value-of select="./column[@name='column1']"/>", 
     "column2":"<xsl:value-of select="./column[@name='column2']"/>", 
     "column3":"<xsl:value-of select="./column[@name='column3']"/>", 
     "color":"<xsl:value-of select="./column[@name='color']"/>", 
     "material":"<xsl:value-of select="./column[@name='material']"/>", 
     "sku":"<xsl:value-of select="./column[@name='sku']"/>", 
     "image2":"<xsl:value-of select="./column[@name='image2']"/>", 
     "image3":"<xsl:value-of select="./column[@name='image3']"/>", 
     "size":"<xsl:value-of select="./column[@name='size']"/>", 
     "gedner":"<xsl:value-of select="./column[@name='gender']"/>", 
     "fourth_category":"<xsl:value-of select="./column[@name='fourth_category']"/>", 
     "size_stock":"<xsl:value-of select="./column[@name='size_stock']"/>", 
     "zupid":"<xsl:value-of select="./column[@name='zupid']"/>" 
     },</xsl:for-each>{"last_tag":""} 
     ] 
     }</xsl:template> 
</xsl:stylesheet> 

答えて

0

を使用することができます。

テンプレート:テンプレートを呼び出すの

<xsl:template name="escape"> 
    <xsl:param name="string" select="."/> 
    <xsl:param name="char" select="'&quot;'"/> 
    <xsl:choose> 
    <xsl:when test="contains($string,$char)"> 
     <xsl:value-of select="substring-before($string,$char)"/> 
     <xsl:text>\"</xsl:text> 
     <xsl:call-template name="escape"> 
     <xsl:with-param name="string" select="substring-after($string,$char)"/> 
     <xsl:with-param name="char" select="$char"/> 
     </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$string"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

例:

{"url":"<xsl:call-template name="escape"> 
    <xsl:with-param name="string" select="column[@name='url']"/> 
</xsl:call-template>", 

あなたは、これが厄介になるだろう見ることができるように。 xsl:for-eachの代わりに<xsl:apply-templates select="column"/>を実行することをおすすめします。

ような何か:!応答のためのすべてのTNXの最初の

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text"/> 

    <xsl:template match="m4n"> 
    <xsl:text>{"data": {&#xA;</xsl:text> 
    <xsl:apply-templates select="data/record/column"/> 
    <xsl:text>&#xA;}}</xsl:text> 
    </xsl:template> 

    <xsl:template match="column"> 
    <xsl:if test="not(position()=1)"> 
     <xsl:text>,&#xA;</xsl:text> 
    </xsl:if> 
    <xsl:value-of select="concat('&quot;',@name,'&quot;: &quot;')"/> 
    <xsl:call-template name="escape"/> 
    <xsl:text>"</xsl:text> 
    </xsl:template> 

    <xsl:template name="escape"> 
    <xsl:param name="string" select="."/> 
    <xsl:param name="char" select="'&quot;'"/> 
    <xsl:choose> 
     <xsl:when test="contains($string,$char)"> 
     <xsl:value-of select="substring-before($string,$char)"/> 
     <xsl:text>\"</xsl:text> 
     <xsl:call-template name="escape"> 
      <xsl:with-param name="string" select="substring-after($string,$char)"/> 
      <xsl:with-param name="char" select="$char"/> 
     </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:value-of select="$string"/> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 
+0

やあ、 – user2156933