输入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>
输出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"
}
]
}
}
如何编写通用的xslt样式表,它将输入的xml转换为json
输入可能在根目录下有太多结果,在结果下可能有系统和名称,在系统下还有ID名称和值。
我从此处复制并粘贴的以下XSLT应该可以帮助您将XML转换为JSON。谢谢 :)
<?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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句