|
Subject: Re: [xsl] XSL | index-of() From: "Mukul Gandhi gandhi.mukul@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 27 Sep 2019 10:46:27 -0000 |
Hi Janine,
Here's the stylesheet that works,
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://stylesheet_fns"
exclude-result-prefixes="xs fn"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="all">
<all>
<xsl:for-each select="documents/doc[fn:isIncludeDoc(.)]">
<doc no="{@no}"><xsl:value-of
select="substring-before(substring-after(., '('), ')')"/></doc>
</xsl:for-each>
</all>
</xsl:template>
<xsl:function name="fn:isIncludeDoc" as="xs:boolean">
<xsl:param name="doc" as="element(doc)"/>
<xsl:sequence select="some $abbr in $doc/../../abbreviations/abbr
satisfies contains($doc, concat('(', $abbr, ')'))"/>
</xsl:function>
</xsl:stylesheet>
On Fri, Sep 27, 2019 at 2:37 PM Janine Lantzsch loderndesfeuer@xxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> Hello community,
>
> I am new in this list and hope very much that someone can help me or give
> me an input with which I can continue to work.
>
> I would like to use XSL to check whether a abbreviation from a list
> appears in a certain string of recurring elements. The abbreviation is
> always written in brackets. The source file looks like this (very
> simplified):
>
> <?xml version="1.0" encoding="UTF-8"?>
> <all>
> <abbreviations>
> <abbr>ABG</abbr>
> <abbr>AGI</abbr>
> <abbr>BBL</abbr>
> <abbr>ECK</abbr>
> </abbreviations>
> <documents>
> <doc no="1">The abbreviation (ABG) appears in this doc.</doc>
> <doc no="2">This doc has no shortcut.</doc>
> <doc no="3">An abbreviation (BBL).</doc>
> <doc no="4">And here (ECK).</doc>
> <doc no="5">And here again (ECK).</doc>
> </documents>
> </all>
>
> Only unfortunately I still have a bug somewhere with the index-of. Maybe
> the more experienced of you will see right away what's wrong with my code.
> I've been brooding since last night and can't find a solution :(
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:fn="http://www.w3.org/2005/xpath-functions" version="2.0">
> <xsl:output method="xml" encoding="UTF-8"/>
> <xsl:template match="all">
> <xsl:variable name="abbr" select="abbreviations/abbr"/>
> <all>
> <xsl:for-each select="//doc">
> <xsl:variable name="actdoc" select="."/>
> <xsl:if test="fn:contains($actdoc, fn:index-of($abbr,
> $actdoc))">
> <doc>
> <xsl:attribute name="no"><xsl:value-of
> select="@no"/></xsl:attribute>
> <xsl:value-of select="$actdoc"/>
> </doc>
> </xsl:if>
> </xsl:for-each>
> </all>
> </xsl:template>
> </xsl:stylesheet>
>
> The output should look something like this:
>
> <all>
> <doc no="1">ABG</doc>
> <doc no="3">BBL</doc>
> <doc no="4">ECK</doc>
> <doc no="5">ECK</doc>
> </all>
>
> Thank you so much for your help!
>
> Many greetings
> Janine S.
>
--
Regards,
Mukul Gandhi
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] XSL | index-of(), Martin Honnen martin | Thread | Aw: Re: [xsl] XSL | index-of(), Janine S. loderndesf |
| Re: [xsl] XSL | index-of(), Martin Honnen martin | Date | Aw: Re: [xsl] XSL | index-of(), Janine S. loderndesf |
| Month |