Subject: RE: [xsl] Best way to substitute a empty child node to the value 'NULL' From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 7 Feb 2008 09:37:28 -0000 |
> Below is a XSLT 2.0 solution: That's a possible solution, but I would do it in push style: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xsl:output indent="yes" /> <xsl:template match="/"> <xsl:for-each select="data/row"> INSERT INTO DBO.TEST (COL1, COL2, COL3, COL4) VALUES( <xsl:value-of separator=","> <xsl:apply-templates/> </xsl:value-of> ); </xsl:for-each> </xsl:template> <xsl:template match="row/*"> <xsl:sequence select="concat($apos, normalize-space(.), $apos)"/> </xsl:template> <xsl:template match="row/*[normalize-space(.) = '']"> <xsl:sequence select="'NULL'"/> </xsl:template> <xsl:variable name="apos" as="xs:string">'</xsl:variable> </xsl:stylesheet> > > > On Feb 7, 2008 10:53 AM, Tariq Ahsan <tariqahsan@xxxxxxxxx> wrote: > > Hi, > > > > I am a newbie to XSLT. I am trying to write a simple xslt script to > > transform a xml file with records to a SQL file which will have > > separate SQL insert statements. But some of the nodes of this input > > xml file will contain empty nodes. I would like to transform all of > > the empty nodes to the value of 'NULL'. Here is a sample content of > > the input xml file > > - > > > > <data> > > <row> > > <TAG1>123</TAG1> > > <TAG2>ABC</TAG2> > > <TAG3 /> > > <TAG4 /> > > </row> > > <row> > > <TAG1>999</TAG1> > > <TAG2>XYZ</TAG2> > > <TAG3 /> > > <TAG4 /> > > </row> > > > > </data> > > > > Here's the what I have now in the xsl file - > > > > <?xml version="1.0" encoding="utf-8"?> > > > > <xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:output indent="yes" /> > > > > <xsl:template match="/"> > > <xsl:for-each select="data/row"> > > INSERT INTO DBO.TEST > > (COL1, COL2, COL3, COL4) VALUES( > > <xsl:value-of select="normalize-space(TAG1)"/>, '<xsl:value-of > > select="normalize-space(TAG2)"/>', > > '<xsl:value-of select="normalize-space(TAG3)"/>', > > <xsl:value-of select="normalize-space(TAG4)"/>, ); </xsl:for-each> > > </xsl:template> </xsl:stylesheet> > > > > Here's the output sql file should have > > > > insert into DBO.TEST (COL1, COL2, COL3, COL4) VALUES (123, 'ABC', > > NULL, NULL); insert into DBO.TEST (COL1, COL2, COL3, COL4) VALUES > > (999, 'XYZ', NULL, NULL); > > > > Would appreciate if I could get a simple solution for this problem. > > > > Thanks > > > > Tariq Ahsan > > > > -- > Regards, > Mukul Gandhi
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Best way to substitute a , Mukul Gandhi | Thread | Re: [xsl] Best way to substitute a , Colin Adams |
Re: [xsl] Best way to substitute a , Mukul Gandhi | Date | Re: [xsl] Best way to substitute a , Colin Adams |
Month |