Mark Wilson wrote:
In an XML file used to generate a cumulative index to a journal, I have
a number of similar citations, one of which sometimes needs to be
removed from the file.
As shown in the original example below, note that the content of the
first <Subject>'s <SubDiv1> child, Kucera, Václav, matches the content
of the second <Subject><Heading>'s child, Kucera, Václav. As shown in
the output example, I want to remove this second <Subject>.
However, I only want to do this for certain <Headings> and need to
specify in my XSLT style sheet, for instance, if within an <Item> the
<Heading>Stamp Designers</Heading>'s <SubDiv1> child is identical to
another another <Subject>'s <Heading> child, remove the latter. Thus, I
cannot use a generalized version (I must be able to specify the first
<Heading>, because not all of these constructs should be removed). I do
not object to running the style sheet repeatedly to apply it to, for
instance, <Heading>Stamp Engravers</Heading>. However, it would be great
to be able to drive it with a list like:
<Removals>
<Citation>Stamp Designers</Citations>
<Citation>Stamp Engravers</Citations>
<Removals>
Any hints or help would be greatly appreciated.
Here is a stylesheet that tries to implement your rules as far as I have
understood them:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:data="http://example.com/2009/data"
exclude-result-prefixes="data"
version="1.0">
<xsl:output method="xml"/>
<data:data>
<Removals>
<Citation>Stamp Designers</Citation>
<Citation>Stamp Engravers</Citation>
</Removals>
</data:data>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Subject[Heading =
preceding-sibling::Subject[Heading =
document('')/xsl:stylesheet/data:data/Removals/Citation]/SubDiv1]"/>
</xsl:stylesheet>
It is simply the identity transformation plus one template suppressing
the copying of any Subject elements for which there is a preceding
Subject element where the Heading is in the Removals list and where the
preceding SubDiv1 is equal to the Heading.
--
Martin Honnen
http://JavaScript.FAQTs.com/
--~------------------------------------------------------------------
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>
--~--