Hi I've got the following content in MARC 245: 245 00 _aTitle _pPart _nVolume I'm using the following XSL code in file "MARC21slim2OPACDetail.xsl": <xsl:if test="marc:datafield[@tag=245]"> <xsl:for-each select="marc:datafield[@tag=245]"> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">a</xsl:with-param> </xsl:call-template> <xsl:text></xsl:text> <xsl:for-each select="marc:subfield[contains('np', @code)]"> <xsl:choose> <xsl:when test="@code='n'"> <br/> <span class="title_medium"><xsl:apply-templates/></span> </xsl:when> <xsl:when test="@code='p'"> <xsl:text> : </xsl:text><span class="title_medium"><xsl:apply-templates/></span> </xsl:when> </xsl:choose> </xsl:for-each> </xsl:for-each> </xsl:if> I'm expecting the following two lines: Title Volume : Part But in fact I'm getting these lines: Title : Part Volume It seems like I can't get 245$n to precede 245$p ... What am I doing wrong, can please someone explain? Best wishes: Michael -- Geschäftsführer · Diplombibliothekar BBS, Informatiker eidg. Fachausweis Admin Kuhn GmbH · Pappelstrasse 20 · 4123 Allschwil · Schweiz T 0041 (0)61 261 55 61 · E mik@adminkuhn.ch · W www.adminkuhn.ch
On Wed, Dec 05, 2018 at 09:18:35PM +0100, Michael Kuhn wrote:
I've got the following content in MARC 245:
245 00 _aTitle _pPart _nVolume
I'm using the following XSL code in file "MARC21slim2OPACDetail.xsl":
<xsl:if test="marc:datafield[@tag=245]"> <xsl:for-each select="marc:datafield[@tag=245]"> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">a</xsl:with-param> </xsl:call-template> <xsl:text></xsl:text> <xsl:for-each select="marc:subfield[contains('np', @code)]"> <xsl:choose> <xsl:when test="@code='n'"> <br/> <span class="title_medium"><xsl:apply-templates/></span> </xsl:when> <xsl:when test="@code='p'"> <xsl:text> : </xsl:text><span class="title_medium"><xsl:apply-templates/></span> </xsl:when> </xsl:choose> </xsl:for-each> </xsl:for-each> </xsl:if>
I'm expecting the following two lines:
Title Volume : Part
But in fact I'm getting these lines:
Title : Part Volume
It seems like I can't get 245$n to precede 245$p ... What am I doing wrong, can please someone explain?
You're doing this: if there's a 245 field: for each 245 field: print subfield $a for each subfield $n or $p: if it's $n: print "<br/>" followed by the subfield contents else if it's $p: print " : " followed by the subfield contents end end end end But that doesn't process 245$n before 245$p. So use the following logic, or something like it: for each 245 field: print subfield $a for each subfield $n: print "<br/>" followed by the subfield contents end for each subfield $p: print " : " followed by the subfield contents end end (The outer conditional seems unnecessary to me, but I could be wrong). Does that help? Paul. -- Paul Hoffman <paul@flo.org> Software Services Manager Fenway Library Organization 550 Huntington Ave. Boston, MA 02115 (617) 442-2384
Hi Paul Am 05.12.18 um 22:06 schrieb Paul Hoffman:
On Wed, Dec 05, 2018 at 09:18:35PM +0100, Michael Kuhn wrote:
I've got the following content in MARC 245:
245 00 _aTitle _pPart _nVolume
I'm using the following XSL code in file "MARC21slim2OPACDetail.xsl":
<xsl:if test="marc:datafield[@tag=245]"> <xsl:for-each select="marc:datafield[@tag=245]"> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">a</xsl:with-param> </xsl:call-template> <xsl:text></xsl:text> <xsl:for-each select="marc:subfield[contains('np', @code)]"> <xsl:choose> <xsl:when test="@code='n'"> <br/> <span class="title_medium"><xsl:apply-templates/></span> </xsl:when> <xsl:when test="@code='p'"> <xsl:text> : </xsl:text><span class="title_medium"><xsl:apply-templates/></span> </xsl:when> </xsl:choose> </xsl:for-each> </xsl:for-each> </xsl:if>
I'm expecting the following two lines:
Title Volume : Part
But in fact I'm getting these lines:
Title : Part Volume
It seems like I can't get 245$n to precede 245$p ... What am I doing wrong, can please someone explain?
You're doing this:
if there's a 245 field: for each 245 field: print subfield $a for each subfield $n or $p: if it's $n: print "<br/>" followed by the subfield contents else if it's $p: print " : " followed by the subfield contents end end end end
But that doesn't process 245$n before 245$p. So use the following logic, or something like it:
for each 245 field: print subfield $a for each subfield $n: print "<br/>" followed by the subfield contents end for each subfield $p: print " : " followed by the subfield contents end end
(The outer conditional seems unnecessary to me, but I could be wrong).
Does that help?
Paul.
Yes, it helped me a lot, thank you very much! After using XSL for some hours I was slightly going nuts probably... but now I came up with the following and it works as expected: <xsl:if test="marc:datafield[@tag=245]"> <xsl:for-each select="marc:datafield[@tag=245]"> <xsl:call-template name="subfieldSelect"> <xsl:with-param name="codes">a</xsl:with-param> </xsl:call-template> <xsl:for-each select="marc:subfield[contains('n', @code)]"> <span class="title_medium"><br/><xsl:apply-templates/></span> </xsl:for-each> <xsl:for-each select="marc:subfield[contains('p', @code)]"> <span class="title_medium"><xsl:text> : </xsl:text><xsl:apply-templates/></span> </xsl:for-each> </xsl:for-each> </xsl:if> Well... in fact this was just the part about showing MARC 245 using the original file "MARC21slim2OPACDetail.xsl" that didn't work as we wanted it. I have now replaced that part with the new one. Best wishes: Michael -- Geschäftsführer · Diplombibliothekar BBS, Informatiker eidg. Fachausweis Admin Kuhn GmbH · Pappelstrasse 20 · 4123 Allschwil · Schweiz T 0041 (0)61 261 55 61 · E mik@adminkuhn.ch · W www.adminkuhn.ch
participants (2)
-
Michael Kuhn -
Paul Hoffman