xsl-list
[Top] [All Lists]

Re: [xsl] using name() to generate a tag dynamically in xsl output - STILL TRYING

2010-02-26 15:25:10
I was not clear. And I should have posted some xml, so here it is:

<text>
   <line id="1" s_len="2.8">
      <word id="1">Thou</word>
      <word id="2">still</word>
      <word id="3">unravish'd</word>
      <word id="4">bride</word>
      <word id="5">of</word>
      <word id="6">quietness</word>,
   </line>
   <clause id="2" s_len="2.4">
      <word id="7">The</word>
      <word id="8">quick</word>-
      <word id="9">brown</word>
      <word id="10">fox</word>
      <word id="11">jumped</word>
      <word id="12">over</word>
      <word id="13">lazy</word>
      <word id="14">dog</word>,
    </clause>
</text>

I want a the xpath which would work in a template match to get the parent node 
of <word>, no matter what it is, whose @s_len attribute is less than 2.5 
seconds.

The template will then compose an element for output, using the tagname of that 
parent of <word> which met that condition.

This works:
<xsl:template match="clause[(_at_)s_len&lt;2.5] | line[(_at_)s_len&lt;2.5]">
<xsl:element name="{name()}">
        <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute>
</xsl:element>
</xsl:template>

But it presumes that I know that the parent of <word> is either a node named 
<clause> or <line>. I am trying to generalize even further and not make that 
assumption in the match condition.

As I said, I cannot seem to use any axis or axis-like expression, so matches 
like the following give an error in Altova Spy:
match="word/parent::*[(_at_)s_len&lt;2.5]"
match="word/../*[(_at_)s_len&lt;2.5]"

I have tried your suggestions and no node is returned, but I think I was not 
clear in what I needed. 


--- On Fri, 2/26/10, Christopher R. Maden <crism(_at_)maden(_dot_)org> wrote:


From: Christopher R. Maden <crism(_at_)maden(_dot_)org>
Subject: Re: [xsl] using name() to generate a tag dynamically in xsl output - 
FOLLOW UP
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Date: Friday, February 26, 2010, 11:50 AM


mark bordelon wrote:
Experimenting with it lead me to a follow-up question.
Altova is complaining about any axis or axis-like syntax in my match
statement. I have also tried word/parent::**[(_at_)s_len&lt;0] and various
others. My idea is to get any node the parent of <word> with that
condition of its attribute.

I was recently surprised to be reminded that match pattern steps are
restricted in their syntax.  Assuming that the double-asterisk was just
a typo in your e-mail, try *[word and @s_len < 0] instead.

~Chris
-- 
Chris Maden, text nerd  <URL: http://crism.maden.org/ >
“The honest man, though e’er sae poor, Is king o’ men for a’ that.”
— Robert Burns, “Is There for Honest Poverty”
GnuPG Fingerprint: C6E4 E2A9 C9F8 71AC 9724 CAA3 19F8 6677 0077 C319

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