如何使用xslt编码字符串以生成正确的JSON文本

时间:2011-08-08 07:02:38

标签: xml json xslt xpath

请使用xslt帮助我将字符串编码为正确的格式。

我的情况是:我有一个xml文件,我需要将其转换为JSON文本,我在xml&中的字符串中看到很多单引号结果JSON结构不合适。怎么处理这个?

<line>brother's sister's</line>

应该导致类似

的JSON
{"line": "brother%25s sister%25s"}

1 个答案:

答案 0 :(得分:0)

您可以使用递归将'替换为%25,例如:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
    <xsl:variable name="apos">'</xsl:variable>

    <xsl:template match="line">
        <xsl:call-template name="replace">
            <xsl:with-param name="input" select="."/>
            <xsl:with-param name="from" select="$apos"/>
            <xsl:with-param name="to" select="'%25'"/>
        </xsl:call-template>
    </xsl:template>

    <xsl:template name="replace">
        <xsl:param name="input"/>
        <xsl:param name="from"/>
        <xsl:param name="to"/>

        <xsl:choose>
            <xsl:when test="contains($input, $from)">
                <xsl:value-of select="substring-before($input, $from)"/>
                <xsl:value-of select="$to"/>

                <xsl:call-template name="replace">
                    <xsl:with-param name="input" select="substring-after($input, $from)"/>
                    <xsl:with-param name="from" select="$from"/>
                    <xsl:with-param name="to" select="$to"/>
                </xsl:call-template>

            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$input"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

</xsl:stylesheet>