|
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 |