Reputation: 121
I'm new to XML and XSLT. What I'm trying to do is a XSLT transformation that matches any element type album/name from my XML document and transforms their values into a link. What I've got so far does half of that. I'm stumped on how to get the links in. Any advice on how to accomplish this would be appreciated.
Edit: using xsltproc -o new_inventory.xml music_inventory.xsl music_inventory.xml
with the below XML and XSLT, it seems that it is putting the links in as I desired, but I get the error message that the document is empty when I try to view from a browser.
Here is new_inventory.xml created by the above command. (Notice how there are no XML tags around any elements accept the link.)
<?xml version="1.0"?>
Led Zepplin
<id><a xmlns="http://www.w3.org/1999/xhtml" href="LEDZEP.xhtml">Mothership</a$
1968
Atlantic
1
1
Good Times Bad Times
Communication Breakdown
Dazed and Confused
Babe I'm gonna Leave You
Whole Lotta Love
Ramble On
Heartbreaker
Immigrant Song
Since I've Been Loving You
XML:
<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>
XSLT
<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>
Upvotes: 1
Views: 118
Reputation: 111756
notice how there are no xml tags around any elements accept the link
If you add the identity transformation to your XSLT,
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<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>
You'll get the missing XML tags back along with your links:
<?xml version="1.0" encoding="UTF-8"?><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>
<id><a xmlns="http://www.w3.org/1999/xhtml" href="LEDZEP.xhtml">Mothership</a></id>
<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>
<id><a xmlns="http://www.w3.org/1999/xhtml" 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>
</music_inventory>
Upvotes: 2