exclude match based on node list

First question on here so bear with me...

I'm confined to XSLT 1.0 via our CMS :-/

Trying to create a SiteMap parsing XML with XSL. But, I need to exclude several directories from being displayed and really don't want to clutter the syntax with a long piped| test statement....

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl">

**<!-- HAVE ALSO TRIED THIS AS A PARAM -->**
<xsl:variable name="pPaths">
    <n>/docs</n>
    <n>/files</n>
</xsl:variable>

<xsl:if test="not( starts-with(path, $pPaths) )">  
    <url>
        <loc>http://www.domain.com<xsl:value-of select="path"/></loc>
        <changefreq>monthly</changefreq>
    </url>
</xsl:if>

In the code above, if there is only 1 'n' element it excludes properly. However, adding the 2nd 'n' stops it from working entirely.

I've also tried these other variations with no luck:

test="not( starts-with(path, $pPaths/*) )"
test="not( starts-with(path, exsl:node-list($pPaths)) )"
test="not( starts-with(path, exsl:node-list($pPaths/*)) )"

Answers


Something like this should work:

<xsl:if test="not(exsl:node-set($pPaths)/*[starts-with(current()/path, .)])">
  • $pPaths is a variable containing a result tree fragment with two child element nodes.
  • exsl:node-set($pPaths) is a node set containing one node (the document fragment) which has two child elements.
  • exsl:node-set($pPaths)/* is a node set containing two nodes (these two child elements).
  • exsl:node-set($pPaths)/*[starts-with(current()/path, .)] is a node set that will contain zero, one or two nodes (those n elements whose text content is a prefix of the current element's first path child)
  • and finally, not(...) is true if that node set is empty, i.e. the current path does not match any of the prefixes.

Note that the /* goes outside the exsl:node-set(...) because you need to first convert the RTF to a node set and only then extract its children - you can't navigate from an RTF directly in XSLT 1.0.


Need Your Help

Append Histogram Class Objects to a list elements in R

r list class histogram

My title's problem is very similar to a lot of's in SOF, though my problem is very different :

jQ: Parse localstorage & stringify values

javascript jquery json local-storage stringify

I am storing some values in localStorage using stringify and I'm trying to parse them but it doesn't work for me.