XML conversion using XSLT -
XML conversion using XSLT -
i trying convert xml using xslt. below construction of xml:
<?xml version="1.0" encoding="utf-8"?> <getinvoicelist> <request> <billstatuscode typecode="1">type description</billstatuscode> <ebillprocessstatuscode typecode="2">type description</ebillprocessstatuscode> </request> </getinvoicelist>
i tried xslt code:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="node()"> <xsl:copy> <xsl:element name="{name()}"> <xsl:apply-templates select="node()"/> </xsl:element> <xsl:apply-templates select="@*"/> </xsl:copy> </xsl:template> <xsl:template match="@*"> <xsl:element name="{name()}"> <xsl:value-of select="."/> </xsl:element> </xsl:template> </xsl:stylesheet>
output:
<getinvoicelist> <getinvoicelist> <request> <request> <billstatuscode> <billstatuscode>type description</billstatuscode> <typecode>1</typecode> </billstatuscode> <ebillprocessstatuscode> <ebillprocessstatuscode>type description</ebillprocessstatuscode> <typecode>2</typecode> </ebillprocessstatuscode> </request> </request> </getinvoicelist> </getinvoicelist>
expected output:
<getinvoicelist> <request> <billstatuscode> <billstatuscode>type description</billstatuscode> <typecode>1</typecode> </billstatuscode> <ebillprocessstatuscode> <ebillprocessstatuscode>type description</ebillprocessstatuscode> <typecode>2</typecode> </ebillprocessstatuscode> </request> </getinvoicelist>
the code working on nodes why duplicates nodes got created. want work on nodes having text & attributes.
would appreciate help regarding this. thanks!
the problem in node()
matching template; have both xsl:copy
, xsl:element
, both create same element, resulting in duplicate. applies nodes
<xsl:template match="node()"> <xsl:copy> <xsl:element name="{name()}">
what need alter match elements attributes
<xsl:template match="*[@*]"> <xsl:copy> <xsl:copy> <xsl:apply-templates select="node()"/> </xsl:copy> <xsl:apply-templates select="@*"/> </xsl:copy> </xsl:template>
then, have template matching node()
in remove xsl:element
element
<xsl:template match="node()"> <xsl:copy> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template>
try xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="node()"> <xsl:copy> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template> <xsl:template match="*[@*]"> <xsl:copy> <xsl:copy> <xsl:apply-templates select="node()"/> </xsl:copy> <xsl:apply-templates select="@*"/> </xsl:copy> </xsl:template> <xsl:template match="@*"> <xsl:element name="{name()}"> <xsl:value-of select="."/> </xsl:element> </xsl:template> </xsl:stylesheet>
xml xslt
Comments
Post a Comment