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 m...@adminkuhn.ch · W www.adminkuhn.ch
_______________________________________________
Koha mailing list  http://koha-community.org
Koha@lists.katipo.co.nz
https://lists.katipo.co.nz/mailman/listinfo/koha

Reply via email to