xsl-list
[Top] [All Lists]

RE: [xsl] XPath attribute expression

2006-12-19 08:21:30
I should have noted that this is not an XSLT application.  So, I need a
pure XPath expression -- probably XPath 1.0.  Any ideas?


-----Original Message-----
From: Alexey Nickolaenkov [mailto:nikolaenkov(_at_)actimind(_dot_)com] 
Sent: Tuesday, December 19, 2006 1:29 AM
To: Hintz, David L
Subject: Re: [xsl] XPath attribute expression

Tuesday, December 19, 2006, 2:27:52 AM, you wrote:

HDL> Assume that my document has this structure:

HDL> <topLevel>
HDL>    <ents>
HDL>       <ent name="abc"><value>test1</value></ent>
HDL>       <ent name="def"><value>test2</value></ent>
HDL>    </ents>
HDL> .
HDL> .
HDL> .
HDL> <para>This is a <entRef name="def"/>.</para>

HDL> What XPath expression can I use in context of this <entRef> element
to
HDL> reference the content of the <value> element that matches the <ent>
name
HDL> attribute (as shown above).  I've gotten this far:

HDL> /topLevel/ents/ent[(_at_)name]/value

HDL> But, that always returns the first value.  Somehow I need to test
@name
HDL> that equals the "name" of the current tag.

I think that problem is not in XPath but in templates. I suppose
something like that will suit for you:

   <xsl:key name="ents-by-name" use="@name" match="//ents/ent"/>

   <xsl:template match="topLevel">
        <html>
          <head>
            <meta http-equiv="Content-Type" content="text/html;
charset=windows-1251"/>
            <title>test</title>
           </head>
          <body>
            <xsl:apply-templates select="page"/>
          </body>
        </html>
   </xsl:template>

   <xsl:template match="para">
      <p><xsl:apply-templates select="@*|node()"/></p>
   </xsl:template>

   <xsl:template match="entRef">
      <xsl:variable name="ent-name" select="key('ents-by-name',
@name)"/>
      <b>

         <xsl:choose>
            <xsl:when test="$ent-name">
               <xsl:value-of select="$ent-name"/>
            </xsl:when>

            <xsl:otherwise>
               <xsl:text/>Undefined ent
            </xsl:otherwise>
         </xsl:choose>
      </b>
   </xsl:template>



-- 
Alexey                            
mailto:alexey(_dot_)nikolaenkov(_at_)actimind(_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>
--~--

<Prev in Thread] Current Thread [Next in Thread>