Mercurial > pub > ModelGenerator
view xslt/json.xsl @ 11:14162f9133a1
working on xml to json transform
author | cin |
---|---|
date | Sun, 08 Apr 2018 23:30:11 +0300 |
parents | cbdada054b4a |
children | 191b81b2052b |
line wrap: on
line source
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <xsl:output method="text" /> <xsl:template match="*[count(*) = 0]"> <xsl:apply-templates mode="json-value" /> </xsl:template> <xsl:template match="*[count(*) > 0]"> <xsl:text>{ </xsl:text> <xsl:apply-templates mode="json-object-member"/> <xsl:text> }</xsl:text> </xsl:template> <xsl:template match="text()"/> <!-- handle json-object --> <xsl:template name="write-object"> </xsl:template> <xsl:template match="*" mode="json-object-member"> <xsl:call-template name="write-json-string"> <xsl:with-param name="text" select="local-name(.)"/> </xsl:call-template> <xsl:text> : </xsl:text> <xsl:apply-templates mode="json-value"/> <xsl:if test="position() != last()"> <xsl:text>, </xsl:text> </xsl:if> </xsl:template> <!-- handle json-value --> <xsl:template match="*[@xsi:nil = 'true']"> <xsl:text>null</xsl:text> </xsl:template> <xsl:template match="text()[. = 'true']" mode="json-value"> <xsl:text>true</xsl:text> </xsl:template> <xsl:template match="text()[. = 'false']" mode="json-value"> <xsl:text>false</xsl:text> </xsl:template> <xsl:template match="text()[string(number(.)) != 'NaN']" mode="json-value"> <xsl:value-of select="number(.)" /> </xsl:template> <xsl:template match="text()" mode="json-value"> <xsl:call-template name="write-json-string"> <xsl:with-param name="text" select="."/> </xsl:call-template> </xsl:template> <xsl:template match="*" mode="json-value"> <xsl:apply-templates select="."/> </xsl:template> <!-- template traits --> <xsl:template name="write-json-string"> <xsl:param name="text"/> <xsl:value-of select="concat('"', $text,'"')" /> </xsl:template> </xsl:stylesheet>