Will,
At 12:49 PM 9/28/2006, Mike wrote:
> <xsl:template match="comments//(h1|p|b|i)">
>
> A syntax like that would be much more fun to maintain and
> adjust than writing out all of the combinations, like so:
>
> <xsl:template match="comments//h1 | comments//p | comments//b
> | comments//i">
>
> I'm using XSLT 2.0 and SaxonB 8.something. Is there some
> obvious solution that I have missed?
Unfortunately while the above is legal in XPath 2.0 in an expression, it's
still not allowed in a pattern - the syntax of patterns is much more
restrictive....
But it's free enough to support a bit of a workaround, even if you
have no schema:
<xsl:variable name="comment-elements" select="//comments//(h1|p|b|i)"/>
<xsl:template match="*[exists(. intersect $comment-elements)]">
...
</xsl:template>
I think this should work. (It worked in a little test instance I
tried.) Basically the predicate says "match this if it's one of the
$comment-elements".
Another way to do this is with XSLT 2.0 pipelining. Pass the document
through an identity transform that flags the elements with an
attribute; then on the second pass match the elements that have the
attribute. That might work better in cases where you have many
different kinds of these things.
I hope that helps.
Cheers,
Wendell
--~------------------------------------------------------------------
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>
--~--