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 |