954,517 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

how can i get the name of the tab in xsl

Hi,

I need the name of the XML tabs. I'll use an example to explain what i want.

XML-
<?xml version="1.0" encoding="ISO-8859-1"?>

<catalog>
	<cd>
		<title>Empire Burlesque</title>
		<artist>Bob Dylan</artist>
		<country>USA</country>
		<company>Columbia</company>
		<price>10.90</price>
		<year>1985</year>
	</cd>
	<cd>
		<title>Hide your heart</title>
		<artist>Bonnie Tyler</artist>
		<country>UK</country>
		<company>CBS Records</company>
		<price>9.90</price>
		<year>1988</year>
	</cd>
	<cd>
		<title>Greatest Hits</title>
		<artist>Dolly Parton</artist>
		<country>USA</country>
		<company>RCA</company>
		<price>9.90</price>
		<year>1982</year>
	</cd>
</catalog>


now i want the values as 'title', 'artist', 'country' and so on.
i tried to do it through XSL however after all attempts i ended up with the values of title (i.e. Empire Burlesque, Hide your heart, Greatest Hits), artist (i.e. Bob Dylan, Bonnie Tyler, Dolly Parton) and similarly for all other tabs.

I am not sure whether this is possible or not.

The output i want is like-

<table>
<tr>
<th>
title
</th>
<th>
artist
</th>
<th>
country
</th>
<th>
company
</th>
<th>
price
</th>
<th>
year
</th>
</tr>
</table>


Please suggest.

himit
Newbie Poster
23 posts since Dec 2009
Reputation Points: 10
Solved Threads: 0
 

Well this is pretty much the most basic XSLT you could write. I'll assume this is a homework assignment. This entire XSLT could be learned from W#C Schools http://www.w3schools.com/xsl/default.asp . But you need to actually try.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

	<xsl:template match="/">
		<html>
			<body>
				<xsl:apply-templates select="catalog"/>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="catalog">
		<table>
			<tr>
				<th>title</th>
				<th>artist</th>
				<th>country</th>
				<th>company</th>
				<th>price</th>
				<th>year</th>
			</tr>
			<xsl:apply-templates select="cd"/>
		</table>
	</xsl:template>

	<xsl:template match="cd">
		<tr>
			<td>
				<xsl:apply-templates select="title"/>
			</td>
			<td>
				<xsl:apply-templates select="artist"/>
			</td>
			<td>
				<xsl:apply-templates select="country"/>
			</td>
			<td>
				<xsl:apply-templates select="price"/>
			</td>
			<td>
				<xsl:apply-templates select="year"/>
			</td>
		</tr>
	</xsl:template>

	<xsl:template match="title | artist | coutnry | price | year">
		<xsl:value-of select="."/>
	</xsl:template>
</xsl:stylesheet>
iceandrews
Junior Poster
185 posts since May 2010
Reputation Points: 10
Solved Threads: 30
 

xml to html with css

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" version="1.0" indent="yes"/>
	<xsl:template match="/">
		<html>
			<style type="text/css">table
{
width:100%;
border-collapse:collapse;
}
tr
{
background-color:#9acd32;
}
tr.even
{
background-color:#9a0000;
}
tr.odd
{
background-color:#009a00;
}
table,th,td
{
border: 2px solid black;
margin:2px;
}
td
{
padding:5px;
text-align:center;
}</style>
			<body>
				<h2>My CD Collection</h2>
				<xsl:apply-templates select="catalog"/>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="catalog">
		<table>
			<tr>
				<th>Pos</th>
				<th>Title</th>
				<th>Artist</th>
				<th>country</th>
				<th>company</th>
				<th>price</th>
				<th>year</th>
			</tr>
			<xsl:apply-templates select="cd"/>
		</table>
	</xsl:template>

	<xsl:template match="cd">
		<tr>
			<xsl:choose>
				<xsl:when test="position() mod 2 = 1">
					<xsl:attribute name="class">odd</xsl:attribute>
				</xsl:when>
				<xsl:when test="position() mod 2 = 0">
					<xsl:attribute name="class">even</xsl:attribute>
				</xsl:when>
			</xsl:choose>
			<td>
				<xsl:value-of select="position()"/>
			</td>
			<!--here choose which display and oder -->
			<xsl:apply-templates select="title|artist|country|company|price|year"/>
		</tr>
	</xsl:template>
	<xsl:template match="*">
		<td>
			<xsl:value-of select="."/>
		</td>
	</xsl:template>
</xsl:stylesheet>
xml_looser
Junior Poster
179 posts since Apr 2009
Reputation Points: 16
Solved Threads: 21
 

Hi xml_looser and iceandrews,

I believe you both got me wrong , its not that i want to avoid working or trying to get help without actually trying on my own.

whatever you both have suggested help me in getting the values of the 'title', 'artist' and all other nodes. however what i want is to get the name of the tab as in this example they are 'title', 'artist' and all others.

i don't want to hardcode them in part as you've done-

<th>title</th>
<th>artist</th>
<th>country</th>
<th>company</th>
<th>price</th>
<th>year</th>


I want these values by the help of XSL.
I hope i made myself clear. Please assist.

himit
Newbie Poster
23 posts since Dec 2009
Reputation Points: 10
Solved Threads: 0
 
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" version="1.0" indent="yes"/>
	<xsl:template match="/">
		<html>
			<style type="text/css">table
{
width:100%;
border-collapse:collapse;
}
tr
{
background-color:#9acd32;
}
tr.even
{
background-color:#9a0000;
}
tr.odd
{
background-color:#009a00;
}
table,th,td
{
border: 2px solid black;
margin:2px;
}
td
{
padding:5px;
text-align:center;
}</style>
			<body>
				<h2>My CD Collection</h2>
				<xsl:apply-templates select="catalog"/>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="catalog">
		<table>
			<tr>
				<th>Pos</th>
				<xsl:apply-templates select="cd[1]/*"  mode="head"/>
			</tr>
			<xsl:apply-templates select="cd"/>
		</table>
	</xsl:template>

	<xsl:template match="cd">
		<tr>
			<xsl:choose>
				<xsl:when test="position() mod 2 = 1">
					<xsl:attribute name="class">odd</xsl:attribute>
				</xsl:when>
				<xsl:when test="position() mod 2 = 0">
					<xsl:attribute name="class">even</xsl:attribute>
				</xsl:when>
			</xsl:choose>
			<td>
				<xsl:value-of select="position()"/>
			</td>
			<!--here choose which display and oder -->
			<xsl:apply-templates select="*"/>
		</tr>
	</xsl:template>
	<xsl:template match="*">
		<td>
			<xsl:value-of select="."/>
		</td>
	</xsl:template>
	<xsl:template match="*" mode="head">
		<th>
			<xsl:value-of select="local-name()"/>
		</th>
	</xsl:template>
</xsl:stylesheet>
xml_looser
Junior Poster
179 posts since Apr 2009
Reputation Points: 16
Solved Threads: 21
 

Thanks a lot xml_looser,

"", this is what i was looking for. i was not aware of 'local-name()'.

Thanks once again.

himit
Newbie Poster
23 posts since Dec 2009
Reputation Points: 10
Solved Threads: 0
 
xml_looser
Junior Poster
179 posts since Apr 2009
Reputation Points: 16
Solved Threads: 21
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: