> From: Code for Libraries [mailto:[log in to unmask]] On
> Behalf Of Hickey,Thom
> Sent: 10 February, 2006 14:19
> To: [log in to unmask]
> Subject: [CODE4LIB] XSLT for LCCNs
>
> Anyone have some XSLT that will take arbitrary LCCN's as they
> are stored in MARC and transform them into a nicely
> hyphenated string for display (like in the errol in my signature)?
>
> --http://errol.oclc.org/laf/n82-54463.html
How about:
<xsl:transform version="2.0"
exclude-result-prefixes="marc xsl"
xmlns:marc="http://www.loc.gov/MARC21/slim"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output method="text" version="1.0"
media-type="text/plain" encoding="utf-8"
omit-xml-declaration="yes" indent="no"
/>
<xsl:strip-space elements="*"/>
<xsl:template name="Root" match="/">
<xsl:for-each select="//marc:record">
<xsl:variable name="LCCN.record" select="marc:datafield[@tag = '010']/marc:subfield[@code = 'a']"/>
<xsl:variable name="LCCN.nospace" select="translate($LCCN.record, ' ', '')"/>
<xsl:variable name="LCCN.length" select="string-length($LCCN.nospace)"/>
<xsl:variable name="LCCN.display" select="concat(substring($LCCN.nospace, 1, $LCCN.length - 6), '-', substring($LCCN.nospace, $LCCN.length - 5))"/>
<xsl:value-of select="concat(' ', $LCCN.display)"/>
</xsl:for-each>
<xsl:value-of select="string(' ')"/>
</xsl:template>
</xsl:transform>
With the XML:
<?xml version="1.0" encoding="utf-8"?>
<collection xmlns="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
<record>
<datafield tag="010" ind1=" " ind2=" ">
<subfield code="a">sj 00001253 </subfield>
</datafield>
</record>
<record>
<datafield tag="010" ind1=" " ind2=" ">
<subfield code="a">sj2005001188</subfield>
</datafield>
</record>
</collection>
Andy.
|