xsl-list
[Top] [All Lists]

Re: [xsl] How do I check to see if any of my descendants contain a certain value?

2007-08-03 06:24:48
Richard Sayre wrote:
I am trying to check me XML to see if any of the descendants contain a
certian value.

<snip />

I can have unlimited Child Types in each type.  When I get to a
certain type, I want to check and see if this node or any descendants
of this node has a value of 0 for the inUse node.

This is what I tried but it did not work:

 <xsl:if test="descendant-or-self::inUse = 0">

Change it to the following and you should be fine (you are looking for string, not for a number):
<xsl:if test="descendant-or-self::inUse = '0'" >

Depending on what you are after, you may want to remove the xsl:if and change it to something like this with apply-templates on the place of your xsl:if:

<xsl:template match="node-to-test[descendant-or-self::inUse = '0' ]">
  ...
</

which will leave the thinking about order and logic to the processor. Also, you can change descendant-or-self:: to .// (yes, the dot is supposed to be there, otherwise the search will be done from the root).

That brings me to another thing. If you all you need is a stylesheet that outputs something when a certain child has a certain value, you may as well do this instead:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
  <xsl:template match="inUse[.='0']">FOUND<xsl:template>
  <xsl:template match="text()" />
</xsl:stylesheet>

The last match is to disable the default stylesheet for text nodes, the first one matches when your criterion is met. In XSLT 2.0 you can put this criterion in a parameter and then you have effectively created an XML search tool (by setting the parameter on the commandline) ;)

Cheers,
-- Abel Braaksma



--~------------------------------------------------------------------
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>
--~--

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