xsl-list
[Top] [All Lists]

Re: How to test if a named attribute exists.

2003-03-10 10:08:52
Hi Imrran,

I would like to do a test to determine if a named attribute exists
in one or more of the child elements.

If the attributes were elements, I can do this with a count of all
the named elements below the <parent> element. For example if I have
the named elements in a lookup table, I can use the following to
check for the existence of each of the elements using the element's
name from the lookup table as follows:

  <xsl:for-each select="$lookup-node/*">
    <xsl:variable name="ItemName"
select="string(name(.))"/>
    <xsl:if
test="count($parent-node//*[name(.)=$ItemName]) &gt;
0">
      <th><xsl:value-of select="$ItemName"/></th>
    </xsl:if>
  </xsl:for-each>

But I do not know how to do the same in the case of attributes.

I'm not sure what $lookup-node or $parent-node are being set to, but I
think that just putting '@' in front of the '*' so that you select
attributes rather than elements might do the trick:

  <xsl:for-each select="$lookup-node/@*">
    <xsl:variable name="ItemName" select="string(name(.))"/>
    <xsl:if test="count($parent-node//@*[name(.)=$ItemName]) &gt; 0">
      <th><xsl:value-of select="$ItemName"/></th>
    </xsl:if>
  </xsl:for-each>

By the way, you can replace the "count(...) > 0" construct path with
the expression that selects the node set: if there aren't any nodes in
the node set then the test will return false, otherwise it will return
true. So you could use:

  <xsl:for-each select="$lookup-node/@*">
    <xsl:variable name="ItemName" select="string(name(.))"/>
    <xsl:if test="$parent-node//@*[name(.)=$ItemName]">
      <th><xsl:value-of select="$ItemName"/></th>
    </xsl:if>
  </xsl:for-each>

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>