I'm not entirely sure I understand the desired logic, but I think
it's "when I process a <product>, identify it with a <controlfield>
that has (as content) the ISBN13 if there is one, the ISBN10 if not".
It would be easier to tell if you'd provide a complete well-formed
test input file.
In any case, I think the attached does what you want in a more
XSLT-ish way.
But it's worth noting that:
<xsl:choose>
<xsl:when test="not( WHATEVER )">
STUFF
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="WHATEVER">
OTHERSTUFF
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
is the same as
<xsl:choose>
<xsl:when test="WHATEVER">
OTHERSTUFF
</xsl:when>
<xsl:otherwise>
STUFF
</xsl:otherwise>
</xsl:choose>
It would probably be a good idea to read the posting guidelines:
http://www.mulberrytech.com/xsl/xsl-list/#posting
In any case, here's one way to do what you want. There are definitely
other ways, some probably better.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/wrapper">
<wrapper>
<xsl:apply-templates select="product"/>
</wrapper>
</xsl:template>
<xsl:template match="product">
<xsl:choose>
<xsl:when test="productidentifier/b221 = '15'">
<xsl:apply-templates select="productidentifier[b221='15']"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="productidentifier[b221='02']"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="productidentifier[b221 eq '02']">
<controlfield tag="001">
<xsl:text>ISBN10=</xsl:text>
<xsl:value-of select="b244"/>
</controlfield>
</xsl:template>
<xsl:template match="productidentifier[b221 eq '15']">
<controlfield tag="001">
<xsl:text>ISBN13=</xsl:text>
<xsl:value-of select="b244"/>
</controlfield>
</xsl:template>
</xsl:stylesheet>
Hoping someone can point out my misunderstanding of the solution in
my transformation to the construction of an element,
<controlfield>, with a preferred ISBN and the use of a second ISBN
(13 characters vs. 10) if the preferred is unavailable; otherwise,
nothing.
<productidentifier>
<b221>02</b221>
<b244>160542868X</b244>
</productidentifier>
<productidentifier>
<b221>03</b221>
<b244>9781605428680</b244>
</productidentifier>
<productidentifier>
<b221>15</b221>
<b244>9781605428680</b244>
</productidentifier>
All of the product records have 3 productidentifiers with b221
element values in the following order: 02, 03, 15.
To test the element construction with the second ISBN (b221=02) if
the preferred ISBN (b221=15) is missing, I removed the
productidentifer with element b221=15 from the second product
record; I removed all productidentifiers from the third record.
<xsl:for-each select="productidentifier">
<xsl:variable name="isbn13">
<xsl:choose>
<xsl:when test="b221='15'">
<xsl:value-of select="b244"/>
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="isbn10">
<xsl:choose>
<xsl:when test="b221='02'">
<xsl:value-of select="b244"/>
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="not(empty($isbn13))">
<controlfield tag="001">
<xsl:text>xyz</xsl:text><xsl:value-of select="$isbn13"/>
</controlfield>
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="empty($isbn13)">
<controlfield tag="001">
<xsl:text>xyz</xsl:text><xsl:value-of select="$isbn10"/>
</controlfield>
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
The results of the three records:
record 1
<controlfield tag="001">xyz</controlfield>
<controlfield tag="001">xyz</controlfield>
<controlfield tag="001">xyz9781605428680</controlfield>
record 2
<controlfield tag="001">xyz</controlfield>
<controlfield tag="001">xyz</controlfield>
record 3 has the desired result of no controlfield tag=001
I am apparently not accounting for productidentifier/b221=03 but
have tried creating a similar variable which would result in an
empty string...have tried using exists()...not using
variables...but always get the same result..
hope the problem is clear...a little cross-eyed at this point..
any help would be greatly appreciated...
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--