This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: How to delete empty element tag from output XML?
- To: xsl-list at mulberrytech dot com
- Subject: RE: How to delete empty element tag from output XML?
- From: "Guangzu Wang (Houston)" <Guangzu dot Wang at channelinx dot com>
- Date: Wed, 25 Oct 2000 12:35:25 -0400
- Reply-To: xsl-list at mulberrytech dot com
Thank you Michael for your help. I try your suggestion but still have
trouble. Maybe my question is not clear before. I give a scenario below.
Input XML:
<?xml version="1.0" encoding="UTF-8"?>
<test>
<people>
<N1>Tom</N1>
<N2>Hopkins</N2>
<N3 />
<Sex>Male</Sex>
</people>
<people>
<N1>Amy</N1>
<N2>Smith</N2>
<N3>R</N3>
<Sex />
</people>
</test>
Expected output XML:
<?xml version="1.0" encoding="UTF-8"?>
<NameList>
<My_Favorite>
<Star>
<FirstName>Tom</FirstName>
<LastName>Hopkins</LastName>
<MI>N/A</MI>
<Gender>Male</Gender>
</Star>
<Star>
<FirstName>Amy</FirstName>
<LastName>Smith</LastName>
<MI>R</MI>
</Star>
</My_Favorite>
</NameList>
You may notice
1). if <Sex> is empty as in Amy case, don't print <Gender />
2). if <N3> is empty as in Tom case, I need a output <MI>N/A</MI>, i.e. a
default of "N/A".
3). the structure and tag of output different with input.
As I mentioned before, the last thing I want to do is use <xsl:if> in XSLT
stylesheet to compare every segment because it's too tedious given the fact
I have numberous tags need to process.
Thanks again. have a good day.
Guangzu
-----Original Message-----
From: Kay Michael [mailto:Michael.Kay@icl.com]
Sent: Wednesday, October 25, 2000 4:32 AM
To: 'xsl-list@mulberrytech.com'
Subject: RE: How to delete empty element tag from output XML?
> I use XSLT to convert XML to XML and HTML. I need to delete
> the tag when
> there are no value in the output. for example, I have XSLT as
> following:
> <NAME><xsl:value-of select="N1" /></NAME>
> I don't need <NAME /> or <NAME> </NAME>.
> One way I can do it is use <xsl:if> outside of <Name> tag,
> but that's too
> much for me because I have a lot of similar tags.
Try
<xsl:template match="*" mode="copy-unless-empty">
<xsl:if test="node()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:if>
</xsl:template>
and then use <xsl:apply-templates mode="copy-unless-empty"/>
to process these elements.
>
> Another related question is that some time I need put a
> default value if nothing there.
A similar technique should do the trick.
Mike Kay
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list