Subject: [xsl] Re: Looping From: Nathan Tallman <ntallman@xxxxxxxxx> Date: Wed, 11 Apr 2012 16:29:29 -0400 |
Thank you Ken, Michele, and Liam! This is exactly what I needed. I'll take a look at your video Ken, I'm just getting my feet wet in XSL and need all the help I can get. On Wed, Apr 11, 2012 at 4:01 PM, Nathan Tallman <ntallman@xxxxxxxxx> wrote: > Hi XSL list, > > I'm a fairly new XSL user and am still figuring things out. Right now > I'm having trouble looping through repeated elements. > > Here's my source XML snippet: > > <ead> > ... > <archdesc> > ... > <did> > ... > <langmaterial encodinganalog="546">Collection material in > <language encodinganalog="041$a" > langcode="eng">English</language>, > <language encodinganalog="041$a" > langcode="yid">Yiddish</language>, and > <language encodinganalog="041$a" > langcode="rus">Russian</language>. > </langmaterial> > > Here's my XSL snippet: > > <xsl:if test="/ead/archdesc/did/langmaterial"> > <xsl:for-each select="/ead/archdesc/did/langmaterial/language[1]"> > <marc:datafield tag="041" ind1=" " ind2=" "> > <marc:subfield code="a"> > <xsl:value-of > select="normalize-space(/ead/archdesc/did/langmaterial/language[1]/@langcode) " > /> > </marc:subfield> > </marc:datafield> > </xsl:for-each> > > <xsl:for-each select="/ead/archdesc/did/langmaterial/language[2]"> > <marc:datafield tag="041" ind1=" " ind2=" "> > <marc:subfield code="a"> > <xsl:value-of > select="normalize-space(/ead/archdesc/did/langmaterial/language[2]/@langcode) " > /> > </marc:subfield> > </marc:datafield> > </xsl:for-each> > > <xsl:for-each select="/ead/archdesc/did/langmaterial/language[3]"> > <marc:datafield tag="041" ind1=" " ind2=" "> > <marc:subfield code="a"> > <xsl:value-of > select="normalize-space(/ead/archdesc/did/langmaterial/language[3]/@langcode) " > /> > </marc:subfield> > </marc:datafield> > </xsl:for-each> > </xsl:if> > > Right now, this achieves what I want. Each langcode is represented by > an individual MARC 041 field. But, as you can see, I have hard coded > each node sequentially. In my XSL, I repeat this ten times, in > anticipation of more langcodes. Is there an easy way to code the > output I want, and then have this loop until it has covered each > instance of <language>? > > I've tried this: > <xsl:if test="/ead/archdesc/did/langmaterial"> > <xsl:for-each select="/ead/archdesc/did/langmaterial/language"> > <marc:datafield tag="041" ind1=" " ind2=" "> > <marc:subfield code="a"> > <xsl:value-of > select="normalize-space(/ead/archdesc/did/langmaterial/language/@langcode)" > /> > </marc:subfield> > </marc:datafield> > </xsl:for-each> > </xsl:if> > But it only repeats the first @langcode three times, instead of having > three distinct outputs. > > Many thanks!
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Looping, Liam R E Quin | Thread | Re: [xsl] Re: Looping, Wendell Piez |
Re: [xsl] Looping, Liam R E Quin | Date | Re: [xsl] Re: Looping, Wendell Piez |
Month |