[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] Trying to check if key is NOT found
Subject: Re: [xsl] Trying to check if key is NOT found From: "David Rudel fwqhgads@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 13 Dec 2014 11:15:58 -0000 |
Hi Russ, For whatever it is worth, I wouldn't use a key to do this type of thing, since you don't actually care about which node may have an @Target attribute matching the href in question. Assuming you have a processor that makes use of the map extension, you can simply find all valid @Target elements, set them as the domain for a map and then evaluate any given @href you want to see whether it is an entry in the map: First, you can create your map as so: <xsl:variable name="target.map" as="map(xs:string,xs:integer)"> <xsl:map> <xsl:for-each-group select="//element()[@Target]" group-by="string(@Target)"> <xsl:map-entry key="'#'||current-grouping-key()" select="1"/> </xsl:for-each-group> </xsl:map> </xsl:variable> Then to determine whether a given href is valid or not, you just have to test whether $target.map(@href) equals 1. If the href does not match any @Target element, then $target.map(@href) will be empty. On Fri, Dec 12, 2014 at 10:01 PM, russurquhart1@xxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Hi, > > I have a snippet of xsl to try and look through our document xml, and let me know if a given CrossRefence href attribute does NOT contain an element with a matching Target attribute. The href attribute value is some string of characters, prefixed by a '#'. There are several elements that can have a Target attribute so i wrote my xsl like the following: > > .c9Y6TC { color:#0000ff; }.c49DIK { color:#ac306d; }.c18YC0 { color:#d00020; }.c5M9S0 { color:#000090; }.c69ORU { color:#aaaba0; } <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> > > <xsl:key name="target_ref_key" match="*[@Target]" use="@Target" /> > > <xsl:template match="CrossReference"> > > <xsl:variable name="unhash_name" select="substring-after(@href, '#')"/> > <xsl:variable name="matched" select="key('target_ref_key', $unhash_name)"/> > <xsl:if test="not($matched)"> > No target for: > <xsl:value-of select="$unhash_name"/> > </xsl:if> > > </xsl:template> > > > </xsl:stylesheet> > > I had read some place on the web that this xsl:if would work to let me know when a key did NOT find any value, but it doesn't seem to be being called. I get the xml file as it is. > > Is this the correct way to do this, or is there a better way? > > thanks for any help, > > > Russ > -- "A false conclusion, once arrived at and widely accepted is not dislodged easily, and the less it is understood, the more tenaciously it is held." - Cantor's Law of Preservation of Ignorance.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Trying to check if key is, Ihe Onwuka ihe.onwuk | Thread | Re: [xsl] Trying to check if key is, Ihe Onwuka ihe.onwuk |
Re: [xsl] Trying to check if key is, Martin Honnen martin | Date | Re: [xsl] Trying to check if key is, Ihe Onwuka ihe.onwuk |
Month |