2016-12-28 1 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