xsl-list
[Top] [All Lists]

RE: [xsl] XPath to select based on attr = same attr of an ancestor

2008-07-14 00:26:18
I think it's:

match="foreign[(_at_)lang = (ancestor::*/@lang)[last()]]"

which is valid in both 1.0 and 2.0.

Michael Kay
http://www.saxonica.com/

-----Original Message-----
From: Syd Bauman [mailto:Syd_Bauman(_at_)Brown(_dot_)edu] 
Sent: 14 July 2008 01:47
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] XPath to select based on attr = same attr of 
an ancestor

The idea here is that I want a template that will match any 
<foreign> element that has a lang= attribute with a value 
that matches the lang= attribute value of said <foreign> 
element's nearest ancestor that has a lang= attribute 
specified. (So that I can delete said
<foreign>.) I.e. in

   <div lang="en">
     <p>Only <foreign lang="en">one</foreign> more!</p>
     <p>Only <foreign lang="es">uno</foreign> more!</p>
   </div>

the first <foreign> should be matched, and the second should not.
Thus the above should become

   <div lang="en">
     <p>Only one more!</p>
     <p>Only <foreign lang="es">uno</foreign> more!</p>
   </div>

I used the following XPath on the match= of an <xsl:template>:
 foreign[(_at_)lang][ancestor::*[(_at_)lang]][1][ ./@lang = 
./ancestor::*[(_at_)lang][1]/@lang ] While my stylesheet seems to 
work for simple cases, it fails for many cases, too. (Like 
missing all but the 1st <foreign> in a <p>.)

In case it helps, I have made the requisite files available 
via the web (see below), but it may be the case that sharp 
eyes here can pick up on some detail I've messed up just by 
looking at the XPath itself.
And while I'd prefer to stick with XSLT 1 and thus XPath 1, 
XSLT 2 and thus XPath 2 is an option.

 1) the story:
    http://bauman.zapto.org/~syd/temp/rrfq/story.txt
 2) the XSLT 1.0 stylesheet itself
    
http://bauman.zapto.org/~syd/temp/rrfq/remove_redundant_foreig
n_elements.xslt
 3) a test input XML file
    
http://bauman.zapto.org/~syd/temp/rrfq/test_remove_redundant_f
oreign_input.xml
 4) the desired output
    
http://bauman.zapto.org/~syd/temp/rrfq/test_remove_redundant_f
oreign_desired.xml
 5) the actual output
    
http://bauman.zapto.org/~syd/temp/rrfq/test_remove_redundant_f
oreign_output.xml


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