Subject: RE: XPath to select based on attr = same attr of an ancestor
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 14 Jul 2008 08:25:45 +0100
|
I think it's:
match="foreign[@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@xxxxxxxxx]
> Sent: 14 July 2008 01:47
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: 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[@lang][ancestor::*[@lang]][1][ ./@lang =
> ./ancestor::*[@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
|