|
Subject: Re: [xsl] cross-ref From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Wed, 8 Aug 2001 18:04:28 +0100 |
Hi Bas,
> If I want to find the attribute value of a cross-ref element in
> another document, based on matching another attribute of the same
> element, thus:
>
> Match /elementName/@refAttr
> with $otherDoc//elementName/@refAttr
> to find $otherDoc//elementName/@desiredAttr
>
> the following is my best guess:
>
> <xsl:variable name="matchValue" select="/xxx/elementName/category" />
> <xsl:variable name="otherDoc" select="document('other.xml')"/>
>
> <!-- Now find the (desiredAttr) of (elementName)s with matchinf
> (refAttr)s. -->
> <xsl:variable name="crossRef"
> select="$otherDoc//elementName[@refAttr =
> $matchValue]/@desiredAttr"/>
It *might* be that you're setting the $matchValue variable to the wrong
thing - you originally said that the value you wanted to match was the
value of the refAttr attribute, but you're setting the $matchValue
variable to the value of the category child of the elementName
element instead. From your original description, you want to set
matchValue to:
<xsl:variable name="matchValue" select="/*/elementName/@refAttr" />
(Of course this assumes that elementName elements are direct children
of the document element in the source XML document.)
With this kind of lookup, it would be more efficient to use a key.
Index the elementName elements by their refAttr attributes:
<xsl:key name="elements-by-ref" match="elementName" use="@refAttr" />
Then to retrieve the elementName element with the $matchValue value
for the refAttr attribute, use an xsl:for-each to set the context to
the $otherDoc, and use the key() function to retrieve the element
that's being referred to:
<xsl:variable name="crossRef">
<xsl:for-each select="$otherDoc">
<xsl:value-of name="key('elements-by-ref',
$matchValue)/@desiredAttr" />
</xsl:for-each>
</xsl:variable>
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] cross-ref, Bas Alberts | Thread | RE: [xsl] cross-ref, Bas Alberts |
| Re: [xsl] namespaces and copying tr, Jeni Tennison | Date | [xsl] Re: Preceding Ancestors, Dimitre Novatchev |
| Month |