Input XML
<Root>
<Result>
<System>
<Name>ABC</Name>
<ID pname="PAD">
<value>4567</value>
</ID>
<lastTime>2013-11-06T17:36:46.000-05:00</lastTime>
</System>
<line>Metals</line>
</Result>
<Result>
<System>
<Name>CAYS</Name>
<ID pname="PAD">
<value>MCIERT</value>
</ID>
<ID pname="ATPAD">
<value>56412</value>
</ID>
<lastTime>2013-12-06T16:43:36.000-05:00</lastTime>
</System>
<System>
<Name>CAYS</Name>
<ID pname="CAD">
<value>DGSG</value>
</ID>
<ID pname="ARCAD">
<value>2847114</value>
</ID>
<lastTime>2013-12-07T20:02:38.000-05:00</lastTime>
</System>
<line>Minerals</line>
</Result>
</Root>
Output Json
{
"Root": {
"Result": [
{
"System": {
"Name": "ABC",
"ID": {
"pname": "PAD",
"value": "4567"
},
"lastTime": "2013-11-06T17:36:46.000-05:00"
},
"line": "Metals"
},
{
"System": [
{
"Name": "CAYS",
"ID": [
{
"pname": "PAD",
"value": "MCIERT"
},
{
"pname": "ATPAD",
"value": "56412"
}
],
"lastTime": "2013-12-06T16:43:36.000-05:00"
},
{
"Name": "CAYS",
"ID": [
{
"pname": "CAD",
"value": "DGSG"
},
{
"pname": "ARCAD",
"value": "2847114"
}
],
"lastTime": "2013-12-07T20:02:38.000-05:00"
}
],
"line": "Minerals"
}
]
}
}
How to write the generic xslt stylesheet which will convert input xml to json
Input might have so many Results under root, Systems and Names under results and also ID name and the values under systems.
XSLTJSON: Transforming XML to JSON using XSLTXSLTJSON is an XSLT 2.0 stylesheet to transform arbitrary XML to JavaScript Object Notation (JSON). JSON is a lightweight data-interchange format based on a subset of the JavaScript language, and often offered as an alternative to XML in—for example—web services.
To convert an XML document to JSON, follow these steps: Select the XML to JSON action from the Tools > JSON Tools menu. Choose or enter the Input URL of the XML document. Choose the path of the Output file that will contain the resulting JSON document.
The standard way to transform XML data into other formats is by Extensible Stylesheet Language Transformations (XSLT). You can use the built-in XSLTRANSFORM function to convert XML documents into HTML, plain text, or different XML schemas.
You can use XSLT for JSON with the aim of fn:json-to-xml. This section describes facilities allowing JSON data to be processed using XSLT.
The below XSLT which I copied and pasted from here should help you to convert XML to JSON. Thanks :)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">{
<xsl:apply-templates select="*"/>}
</xsl:template>
<!-- Object or Element Property-->
<xsl:template match="*">
"<xsl:value-of select="name()"/>" :<xsl:call-template name="Properties">
<xsl:with-param name="parent" select="'Yes'"> </xsl:with-param>
</xsl:call-template>
</xsl:template>
<!-- Array Element -->
<xsl:template match="*" mode="ArrayElement">
<xsl:call-template name="Properties"/>
</xsl:template>
<!-- Object Properties -->
<xsl:template name="Properties">
<xsl:param name="parent"></xsl:param>
<xsl:variable name="childName" select="name(*[1])"/>
<xsl:choose>
<xsl:when test="not(*|@*)"><xsl:choose><xsl:when test="$parent='Yes'"> <xsl:text>"</xsl:text><xsl:value-of select="."/><xsl:text>"</xsl:text></xsl:when>
<xsl:otherwise>"<xsl:value-of select="name()"/>":"<xsl:value-of select="."/>"</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="count(*[name()=$childName]) > 1">{ "<xsl:value-of select="$childName"/>" :[<xsl:apply-templates select="*" mode="ArrayElement"/>] }</xsl:when>
<xsl:otherwise>{
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="*"/>
}</xsl:otherwise>
</xsl:choose>
<xsl:if test="following-sibling::*">,</xsl:if>
</xsl:template>
<!-- Attribute Property -->
<xsl:template match="@*">"<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>",
</xsl:template>
</xsl:stylesheet>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With