David's solution looks correct to me.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Charles Flanders [mailto:cflanders(_at_)vasont(_dot_)com]
Sent: 20 March 2009 12:35
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Interrogating attributes values to get text
(part deaux)
Thank you David for your template.
My apologies for not providing a complete example of my XML.
In my quest to be brief, I did give a full picture of my
problem. The problem is that there are multiple <nameloc>
elements to interrogate. The template you wrote always
returns the value for the child of the first <nameloc>. I
need to interrogate each <nameloc> id value to find the one
that matches @linkend for the current <HYPERTEXT>. I've tried
creating a variable using <xsl:for-each>, and then evaluating
that against the value of @linkend, but I end with the the
first <nameloc> child "P3-11" each time.
My sample should have looked like this:
<document>
<nameloc id="M05-08.-HT1">
<nmlist nametype="element" dtdorlpd="BODY"
type="PARA0">P3-11</nmlist>
</nameloc>
<nameloc id="M05-08.-HT2">
<nmlist nametype="element" dtdorlpd="REAR"
docorsub="APPX-F" elemtype="ROW">item1</nmlist>
</nameloc>
<nameloc id="M05-08.-HT3">
<nmlist nametype="element" dtdorlpd="REAR"
docorsub="APPX-G" elemtype="ROW">item2</nmlist>
</nameloc>
<nameloc id="M05-08.-HT4">
<nmlist nametype="element" dtdorlpd="REAR"
docorsub="APPX-G" elemtype="ROW">item9</nmlist>
</nameloc>
<nameloc id="M05-08.-HT5">
<nmlist nametype="element" dtdorlpd="REAR"
docorsub="APPX-G" elemtype="ROW">item36</nmlist>
</nameloc>
<STEP>
<HYPERTEXT linkend="M05-08.-HT2">Service
air cleaner assembly.</HYPERTEXT>
</STEP>
</document>
Result to be:
<step>Service air cleaner assembly.<link item="item1"></step>
C Flanders
Date: Thu, 19 Mar 2009 18:42:13 -0400
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
From: Charles Flanders <cflanders(_at_)vasont(_dot_)com>
Subject: Interrogating attributes values to get text
Message-ID: <49C2CA45(_dot_)60105(_at_)vasont(_dot_)com>
I could use help with problem that I just don't seem to have
the programming chops to conquer. I don't have template for
anyone to analyze, I can't seem to get to that state. I'm
using XSL 1.0.
Here is my conundrum:
I have an element <HYPERTEXT>, that has an attribute called
"linkend".
The value of "linkend" corresponds to an ID attribute on an
element further up the tree (preceding). This element is
named <nameloc>. This element has a child, <nmlist>. My goal
is to convert <HYPERTEXT> to <link> (easy enough). But my
problem is I can't seem to write an expression (xsl:if?
xsl:when?) to can go find the <nameloc> element that has the
corresponding ID, then get the text of <nmlist> as the value
of an "item" attribute on <link>.
The following are just snippets of XML. The entire tree
structure should be irrelevant. Also, the <nameloc> and
<nmlist> elements are eliminated in the results (not
converted or output).
Current XML:
<document>
<nameloc id="M05-08.-HT2">
<nmlist nametype="element" dtdorlpd="REAR" docorsub="APPX-F"
elemtype="ROW">item1</nmlist>
</nameloc>
<STEP>
<HYPERTEXT linkend="M05-08.-HT2">Service
air cleaner assembly.</HYPERTEXT>
</STEP>
</document>
The result I need to create is this:
<step>Service air cleaner assembly.<link item="item1"></step>
How do I write a test will get me text of <nmlist> based on
the comparison of "linkend" and "id"?
Thanks.
C. Flanders
------------------------------
Date: Thu, 19 Mar 2009 22:45:52 GMT
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
From: David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk>
Subject: Re: [xsl] Interrogating attributes values to get text
Message-Id:
<200903192245(_dot_)n2JMjqBu032713(_at_)edinburgh(_dot_)nag(_dot_)co(_dot_)uk>
<xsl:key name="id" match="nameloc" use="@id"/> <xsl:template
match="HYPERTEXT"> <link item="{key('id',@linkend)/nmlist}"/>
</xsl:template>
David
--
*C. Flanders*
<mailto:cflanders(_at_)vasont(_dot_)com>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--