|
Subject: Re: [xsl] Check for null value and Check if child tag exists From: Dan Diebolt <dandiebolt@xxxxxxxxx> Date: Mon, 16 Apr 2001 08:04:41 -0700 (PDT) |
Priya,
If you have control over the format of the XML, you might consider
distributing the Region Name into an attribute of the City element:
<Region Name="Herat">
<City Name="Herat" Time="GMT+04:30"></City>
</Region>
<City Region="Herat" Name="Herat" Time="GMT+04:30"></City>
In your original XML, the Region element acts as a "phony" container
merely setting up some City elements or "inherit" a region name.
You might ask why this process couldn't continue with the country
as well. For example:
<City Country="Afghanistan" Region="Herat"
Name="Herat" Time="GMT+04:30"></City>
My advise is to try and use an XML representation that has a
"balanced tree" if possible - unless there is a good reason
not to. If your data was inherently unbalanced (some attributes
or elements occur only rarely), this is certainly a good reason
not to.
On the other hand if you have no control over the XML format, you
have to work with what you are given. In any event, I enclude a verion
that works with your original data noting that you have excluded
at least one region in your desired output:
<row>
<country>Afghanistan</country>
<region/>
<city>Herat</city>
</row>
and have a reference to element city2 that I ignored.
Regards,
Dan
************************************************************
File: CountryProblem.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="CountryProblem.xsl"?>
<World>
<Country Name="Afghanistan">
<Region Name="Herat">
<City Name="Herat" Time="GMT+04:30"></City>
</Region>
<City Name="Kabul" Time="GMT+04:30"></City>
<City Name="Kandahar" Time="GMT+04:30"></City>
<City Name="Mazar-e Sharif" Time="GMT+04:30"></City>
</Country>
<Country Name="Albania">
<City Name="Shkoder" Time="GMT+01:00"></City>
<City Name="Tirane" Time="GMT+01:00"></City>
</Country>
<Country Name="Algeria">
<Region Name="Algiers">
<City Name="Alger" Time="GMT+01:00"></City>
<City Name="Annaba" Time="GMT+01:00"></City>
<City Name="Blida" Time="GMT+01:00"></City>
<City Name="Constantine" Time="GMT+01:00"></City>
<City Name="Oran" Time="GMT+01:00"></City>
<City Name="Skikda" Time="GMT+01:00"></City>
</Region>
</Country>
<Country Name="American Samoa">
<City Name="Pago Pago" Time="GMT-11:00"></City>
</Country>
</World>
File: CountryProblem.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:element name="rowset">
<xsl:apply-templates select="World"/>
</xsl:element>
</xsl:template>
<xsl:template match="World">
<xsl:apply-templates select="Country"/>
</xsl:template>
<xsl:template match="Country">
<xsl:for-each select="Region/City">
<xsl:element name="row">
<xsl:element name="country"><xsl:value-of
select="../../@Name"/></xsl:element>
<xsl:element name="region"><xsl:value-of select="../@Name"/></xsl:element>
<xsl:element name="city"><xsl:value-of select="@Name"/></xsl:element>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="City">
<xsl:element name="row">
<xsl:element name="country"><xsl:value-of
select="../@Name"/></xsl:element>
<xsl:element name="region"><xsl:value-of select="''"/></xsl:element>
<xsl:element name="city"><xsl:value-of select="@Name"/></xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail.
http://personal.mail.yahoo.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Check for null value and , Jeni Tennison | Thread | [xsl] <xsl:for-each select> and ace, Priya Pinto |
| RE: [xsl] Is it a bug of msxml3, Xuegen Jin | Date | Re: [xsl] <xsl:for-each select> and, Dan Diebolt |
| Month |