RE: [xsl] Matching elements with specific multiple parents

Subject: RE: [xsl] Matching elements with specific multiple parents
From: Tony Nassar <tnassar@xxxxxxxxxxxx>
Date: Fri, 1 Apr 2011 14:47:09 -0700
You could easily generate something like the following. It's hardly elegant,
but then again, it is generated code. I don't know what all you need to
accomplish here. One alternative is a different match expression:
child[not(parent::child)]. Moreover, couldn't you just match the <child>
elements that interest you, then <apply-imports> if you're really just copying

        <xsl:template match="foo/child">
             <xsl:call-template name="process-child" />

       <xsl:template match="bar/child">
          <xsl:call-template name="process-child"/>

      <xsl:template name="process-child">
                <child a="{@a}"/>
                <xsl:apply-templates select="*"/>

From: David Lee [dlee@xxxxxxxxxxx]
Sent: Friday, April 01, 2011 5:38 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] Matching elements with specific multiple parents

I'm trying to write a template match expression that matches an element only
if it is a child of (1 or more) parents.
Here's an example with 2 parents.
<?xml version="1.0"?>
        <child a="1">
                <child a="2"/>
                <child a="3"/>
                <child a="4"/>

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"

        <xsl:template match="text()"/>

        <xsl:template match="child[node-name(..) = ( QName((),'foo') ,
QName((),'bar') )]">
                <child a="{@a}"/>
                <xsl:apply-templates select="*"/>

Result (correct)
<child a="3"/>
<child a="4"/>

This seems extremely verbose and inelegant but is the best I've come up
I'd like something like

but of course that doesn't work.

Any suggestions on a simpler syntax then what I've come up with ?
Note that this is programmatically generated XSLT so I cant easily
hand-optimize simple cases, it needs to work in the 1-N case in a way that's
reasonably constructible programmatically.
My working example is straightforward to construct but it hurts my eyes.
Maybe its just my eyes that needs work :)

Thanks for any ideas

David A. Lee

Current Thread