Thank you Martin. That is excellent. I have never used the "satisfies"
expression, but I can see that this is a perfect application for it. Thanks
again!
From: Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Wednesday, December 18, 2019 11:12 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Suggestions for filtering algorithm
Am 18.12.2019 um 04:08 schrieb Rick Quatro rick(_at_)rickquatro(_dot_)com
<mailto:rick(_at_)rickquatro(_dot_)com> :
Hi All,
I have an XML file with parts similar to this:
<?xml version="1.0" encoding="UTF-8"?>
<parts>
<part no="123456" desc="HOSE KIT"/>
<part no="234567" desc="HOSE FITTINGS"/>
<part no="345678" desc="HOSE SEGMENT"/>
</parts>
When processing the parts with XSLT 2, I want to filter out some of the
parts based on words or phrases that the user supplies. I was thinking of a
lookup XML file that they could maintain:
<?xml version="1.0" encoding="UTF-8"?>
<exclude>
<exclude>FITTINGS</exclude>
<exclude>SEGMENT</exclude>
</exclude>
This is a roughed out stylesheet, but I am not sure the best way to use the
look up. I could convert the <exclude> elements to a regular expression and
apply it to the @desc attribute, but I am not sure if there is a better
approach that I am missing.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl= <http://www.w3.org/1999/XSL/Transform>
"http://www.w3.org/1999/XSL/Transform"
xmlns:xs= <http://www.w3.org/2001/XMLSchema>
"http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:variable name="exclude" select="doc('excludes.xml')"/>
<xsl:template match="/parts">
<xsl:apply-templates/>
</xsl:template>
If you add an empty template
<xsl:template match="part[some $exclude in $exclude/exclude/exclude
satisifes matches(@desc, $exclude) ]"/>
then any matched "part"s will not be processed, for the rest you can set up
the identity transformation. Or you can of course use any such predicate in
an apply-templates e.g.
<xsl:apply-templates select="part[not(some $exclude in
$exclude/exclude/exclude satisifes matches(@desc, $exclude))]"/>
XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
<http://lists.mulberrytech.com/unsub/xsl-list/612310> EasyUnsubscribe (
<> by email)
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--