Reputation: 121
I'm attempting to duplicate an xml via XSLT and the CSS from the source XML is being placed in the body of the xhtml xml file and the head element appears to be empty. How do I get the CSS reference in the correct place so that it formats the newly created XML file.
Source XML
<?xml version="1.0" encoding="utf-8"?>
<?DOCTYPE album SYSTEM "music_inventory.dtd"?>
<?xml-stylesheet type="text/css" href="music_inventory.css"?>
<music_inventory>
<album id="LEDZEP" type="full_length" albumart="http://upload.wikimedia.org/wikipedia/en/c/cb/Led_Zeppelin_-_Mothership.jpg">
<artist>Led Zepplin</artist>
<name>Mothership</name>
<year>1968</year>
<label>Atlantic</label>
<disc>1</disc>
<totaldiscs>1</totaldiscs>
<tracklist>
<track id="1">Good Times Bad Times</track>
<track id="2">Communication Breakdown</track>
<track id="3">Dazed and Confused</track>
<track id="4">Babe I'm gonna Leave You</track>
<track id="5">Whole Lotta Love</track>
<track id="6">Ramble On</track>
<track id="7">Heartbreaker</track>
<track id="8">Immigrant Song</track>
<track id="9">Since I've Been Loving You</track>
<track id="10">Rock and Roll</track>
<track id="11">Black Dog</track>
<track id="12">When the Levee Breaks</track>
<track id="13">Stairway to Heaven</track>
</tracklist>
</album>
<album id="SUBL" type="full_length" albumart="http://upload.wikimedia.org/wikipedia/en/thumb/9/94/Sublime_Self-Titled.jpg/220px-Sublime_Self-Titled.jpg">
<artist>Sublime</artist>
<name>Sublime</name>
<year>1996</year>
<label>MCA</label>
<disc>1</disc>
<totaldiscs>1</totaldiscs>
<tracklist>
<track id="1">Garden Grove</track>
<track id="2">What I Got</track>
<track id="3">Wrong Way</track>
<track id="4">Same in the End</track>
<track id="5">April 29, 1992 (Miami)</track>
<track id="6">Santeria</track>
<track id="7">Seed</track>
<track id="8">Jailhouse</track>
<track id="9">Pawn Shop</track>
<track id="10">Paddle Out</track>
<track id="11">The Ballad of Johnny Butt</track>
<track id="12">Burritos</track>
<track id="13">Under My Voodoo</track>
<track id="14">Get Ready</track>
<track id="15">Caress Me Down</track>
<track id="16">What I Got (Reprise)</track>
<track id="17">Doin' Time</track>
</tracklist>
</album>
</music_inventory>
XSL
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
>
<xsl:output method="xml" />
<xsl:template match="* | @* | processing-instruction()">
<xsl:copy>
<xsl:apply-templates select="* | @* | text() | processing-instruction()"/>
</xsl:copy>
</xsl:template>
<xsl:param name="albumid">SUBL</xsl:param>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="music_inventory">
<xsl:apply-templates select="album[@id=$albumid]"/>
</xsl:template>
<!--creates hyperlink-->
<xsl:template match="album/name">
<id>
<a xmlns="http://www.w3.org/1999/xhtml"
href="{../@id}.xhtml">
<xsl:value-of select="."/>
</a>
</id>
</xsl:template>
</xsl:stylesheet>
Resulting XML (note the placement of the stylesheet reference)
<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml">
<body><?xml-stylesheet type="text/css" href="music_inventory.css"?><album xmlns="" id="SUBL" type="full_length" albumart="http://upload.wikimedia.org/wikipedia/en/thumb/9/94/Sublime_Self-Titled.jpg/220px-Sublime_Self-Titled.jpg">
<artist>Sublime</artist>
<id xmlns="http://www.w3.org/1999/xhtml"><a href="SUBL.xhtml">Sublime</a></id>
<year>1996</year>
<label>MCA</label>
<disc>1</disc>
<totaldiscs>1</totaldiscs>
<tracklist>
<track id="1">Garden Grove</track>
<track id="2">What I Got</track>
<track id="3">Wrong Way</track>
<track id="4">Same in the End</track>
<track id="5">April 29, 1992 (Miami)</track>
<track id="6">Santeria</track>
<track id="7">Seed</track>
<track id="8">Jailhouse</track>
<track id="9">Pawn Shop</track>
<track id="10">Paddle Out</track>
<track id="11">The Ballad of Johnny Butt</track>
<track id="12">Burritos</track>
<track id="13">Under My Voodoo</track>
<track id="14">Get Ready</track>
<track id="15">Caress Me Down</track>
<track id="16">What I Got (Reprise)</track>
<track id="17">Doin' Time</track>
</tracklist>
</album></body></html>
Upvotes: 0
Views: 549
Reputation: 117175
the head element appears to be empty.
There is no head element in your output. If you want to have a head element you must create it - and if you don't want it to be empty, you must put something in it.
For example, you could do:
<xsl:template match="/">
<html>
<head>
<xsl:copy-of select="processing-instruction('xml-stylesheet')" />
</head>
<body>
<xsl:apply-templates select="music_inventory/album[@id=$albumid]"/>
</body>
</html>
</xsl:template>
This would create a head section in your output document and copy the processing-instruction linking to the stylesheet into it, with no change.
Whether that's what you want is not quite clear to me. I think your stylesheet has numerous issues which are unrelated to your current question, and which I don't have time to go into now. As a result, it's hard to tell what exactly is the result you want to end up with, and whether such result would be useful for anything.
Upvotes: 0
Reputation: 5432
The template matching /
has the problem. You may use this stylesheet:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" >
<xsl:output method="xml" />
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:param name="albumid">SUBL</xsl:param>
<xsl:template match="/">
<xsl:apply-templates select="processing-instruction()"/>
<html>
<body>
<xsl:apply-templates select="*"/>
</body>
</html>
</xsl:template>
<xsl:template match="music_inventory">
<xsl:apply-templates select="album[@id=$albumid]"/>
</xsl:template>
<!--creates hyperlink-->
<xsl:template match="album/name">
<id>
<a xmlns="http://www.w3.org/1999/xhtml" href="{../@id}.xhtml">
<xsl:value-of select="."/>
</a>
</id>
</xsl:template>
</xsl:stylesheet>
Upvotes: 2