xsl-list
[Top] [All Lists]

Re: Exclusions in XPATH

2002-11-21 08:24:53
Hi Robin,

XSL:
                <xsl:template match="A">
                        <xsl:for-each
select="./*[1]//*[not(*)]|./*[1]//@*[not(*)]">   
                                <xsl:value-of select="name()"/> 
                                <xsl:if test="position()!=last()">;</xsl:if>

                        </xsl:for-each> 
                <xsl:apply-templates/> 
        </xsl:template>

Question 1: Can I get both attribute-names and element-names more
easily in the select or does it have to be like I have it above ?

You can probably simplify the expression you're using to select the
elements and attributes to:

  .//*[not(*)] | .//@*

I say probably because (a) your path only looks at the descendants of
the first child of the <A> element, whereas the above looks at all
descendants of the <A> element and (b) your path wouldn't pick the <B>
element if it only held text, whereas mine would.
  
If I only know the element-names A and F

Question 2: How can I exclude the descendants of element F from the
select ? Output would then be C;E;W. I've tried various combinations
but either end up with all-or-nothing.

I think that the easiest way would be to add a filter to the
expression to only select those nodes that do not have the <F> element
as an ancestor:

  (.//*[not(*)] | .//@*)[not(ancestor::F)]

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>