[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: filter using contains with multiple values

Subject: Re: filter using contains with multiple values
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 4 Mar 2016 11:38:51 -0000
Re:  filter using contains with multiple values
Raimund Kammering raimund.kammering@xxxxxxx wrote:
okay got that point (parenthesis). But still that does not work for me since somehow the string in filter_value is not understood as sequence!
So if I now use:

<xsl:if test="*[name()= $filter and . = $filter_value]b>

or as Michael suggested

<xsl:if test="*[name()= $filter][. = $filter_value]b>

it only matches the first of the two in the sequence if I use

<xsl:param name="filter_value" as="xs:string*" select="'Log', bInfo'b/>

to pass the parameter! Even an:

<xsl:value-of select=b$filter_valueb/>

only returns: bLogb where I would expect it to return the whole parameter! I seem to still miss some crucial point in making filter_value being understood as sequence here!?

Are you sure you are using an XSLT 2.0 processor with the
<xsl:stylesheet version="2.0"
? The xsl:value-of results sounds as if you have the wrong version attribute on your xsl:stylesheet or xsl:transform (or somewhere in your code you set xsl:version to 1.0).


For me

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">


<xsl:param name="filter" as="xs:string" select="'keyword'"/>
<xsl:param name="filter_values" as="xs:string*" select="'Log', 'Info'"/>

<xsl:template match="/">
    <xsl:copy-of select="//*[name() = $filter and . = $filter_values]"/>
</xsl:template>


</xsl:transform>


when run against

<list>
  <entry>
    <keyword>Log</keyword>
    <location>A</location>
  </entry>
  <entry>
    <keyword>Log</keyword>
    <location>B</location>
  </entry>
  <entry>
    <keyword>Problem</keyword>
    <location>A</location>
  </entry>
  <entry>
    <keyword>Info</keyword>
    <location>B</location>
  </entry>
</list>

with Saxon 9 (see online at http://xsltransform.net/gWvjQg1) returns the three elements

<keyword>Log</keyword><keyword>Log</keyword><keyword>Info</keyword>


The contains check with "some" would be


<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">


<xsl:param name="filter" as="xs:string" select="'keyword'"/>
<xsl:param name="filter_values" as="xs:string*" select="'Log', 'Info'"/>

<xsl:template match="/">
<xsl:copy-of select="//*[name() = $filter and (some $value in $filter_values satisfies contains(., $value))]"/>
</xsl:template>



</xsl:transform>


with the sample

<list>
  <entry>
    <keyword>Log</keyword>
    <location>A</location>
  </entry>
  <entry>
    <keyword>Log</keyword>
    <location>B</location>
  </entry>
  <entry>
    <keyword>Problem</keyword>
    <location>A</location>
  </entry>
  <entry>
    <keyword>The newest Info</keyword>
    <location>B</location>
  </entry>
</list>


giving


<keyword>Log</keyword><keyword>Log</keyword><keyword>The newest Info</keyword>

(Online at http://xsltransform.net/gWvjQg1/1)

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.