I'm using XSLT to transform XML files into a format that Excel can delimit (sample code shown later). For example, when opened in Excel, the delimited version might look something like:
+---------------+---------------+----------+
|URL |Title | Version |
+---------------+---------------+----------+
|dogs_are_cool |Dogs are cool | May 2013 |
+---------------+---------------+----------+
The problem is related to the fact that every URL has the version appended at the end. Using the previous example, dogs_are_cool is actually dogs_are_cool_may2013.html.
I'd like to do two things with that appended version:
- Remove the version when printing the URL.
- Reformat and print the version.
I'm guessing the best way to do this is by somehow splitting the URL on the underscores. Then putting the last element split in one variable and printing the other elements in order--inserting the underscores back in.
I'm not sure how to go about that.
Sample XML:
<contents Url="toc_animals_may2013.html" Title="Animals">
<contents Url="toc_apes_may2013.html" Title="Apes">
<contents Url="chimps_may2013.html" Title="Some Stuff About Chimps" />
</contents>
<contents Url="toc_cats" Title="Cats">
<contents Url="hairless_cats_may2013.html" Title="OMG Where Did the Hair Go?"/>
<contents Url="wild_cats_may2013.html" Title="These Things Frighten Me"/>
</contents>
<contents Url="toc_dogs_may2013.html" Title="Dogs">
<contents Url="toc_snorty_dogs_may2013.html" Title="Snorty Dogs">
<contents Url="boston_terriers_may2013.html" Title="Boston Terriers" />
<contents Url="french_bull_dogs_may2013.html" Title="Frenchies" />
</contents>
</contents>
</contents>
Sample XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no"/>
<!-- This variable sets the delimiter symbol that Excel will use to seperate the cells -->
<xsl:variable name="delimiter">@</xsl:variable>
<xsl:template match="contents">
<!-- Prints the URL -->
<xsl:value-of select="@Url"/>
<xsl:copy-of select="$delimiter" />
<!-- Prints the title -->
<xsl:apply-templates select="@Title"/>
<xsl:copy-of select="$delimiter" />
<!-- I'd like to print the version here -->
<xsl:copy-of select="$delimiter" />
<xsl:template match="/">
<xsl:apply-templates select="//contents"/>
</xsl:template>
</xsl:stylesheet>