2013-12-18 17 views
6

Sto provando a convertire un XML in JSON utilizzando XSLT. Di seguito sono riportati i miei codici XML e XSLT.Problemi nella conversione da XML a JSON utilizzando XSLT

file XML: file di

<?xml version="1.0" encoding="ISO-8859-1"?> 
<catalog> 
    <cd> 
     <title>Empire Burlesque</title> 
     <artist>Bob Dylan</artist> 
     <country>USA</country> 
     <price>10.90</price> 
     <year>1985</year> 
    </cd> 
    <cd> 
     <title>Subrayana kathe</title> 
     <artist>Subba</artist> 
     <country>India</country> 
     <price>30</price> 
     <year>1986</year> 
    </cd> 
</catalog> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
     { 
"catalog":[ 
     <xsl:for-each select="catalog/cd"> 
     {"title":" 
     <xsl:value-of select="title" /> 
     ", 
"artist":" 
     <xsl:value-of select="artist" /> 
     "}, 
     </xsl:for-each> 
     ] 
     } 
    </xsl:template> 
</xsl:stylesheet> 

uscita di XSLT:

{ 
    "catalog":[ 
     { 
     "title":"Empire Burlesque", 
     "artist":"Bob Dylan" 
     }, 
     { 
     "title":"Subrayana kathe", 
     "artist":"Subba" 
     },(Problematic comma) 
    ] 
} 

Il problema è che c'è una virgola in più ('') a la fine dell'ultimo oggetto nella matrice. C'è un modo per evitarlo in XSLT?

risposta

11

Scrivi la virgola solo se esiste un altro elemento cd nel tuo xml.

Quindi sostanzialmente si devono avvolgere la virgola in un comunicato xsl:if come questo: <xsl:if test="./following-sibling::cd">,</xsl:if>

Così il vostro foglio di stile sarà simile a quanto segue:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
     { 
"catalog":[ 
     <xsl:for-each select="catalog/cd"> 
     {"title":" 
     <xsl:value-of select="title" /> 
     ", 
"artist":" 
     <xsl:value-of select="artist" /> 
     "}<xsl:if test="./following-sibling::cd">,</xsl:if> 
     </xsl:for-each> 
     ] 
     } 
    </xsl:template> 
</xsl:stylesheet>