XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Matt MagsSubject: Problem getting only a single node and need an ELSE structure
Author: Matt Mags
Date: 14 Aug 2007 08:49 AM
Originally Posted: 14 Aug 2007 08:37 AM
How can I say grab the first instance of node X and only the first instance BUT if there are no node X's, grab the first instance of node Y and only the first?

Basically we want to work on the first nodes of whatever path exists and has "highest priority." Here highest priority is a predefined chain in which we work with the data.

So it would be work the first node of type A. If A[1] doesn't have all the attributes required, try A[2], then A[x]. If NONE of the A's have the right attributes, try node B[x] until we find one that satisfies the requirements.

I'm not very good with XSLT so this is kind of driving me crazy

Thanks

Postnext
James DurningSubject: Problem getting only a single node and need an ELSE structure
Author: James Durning
Date: 14 Aug 2007 12:06 PM
This is done by using a choose-when-otherwise clause:

<xsl:choose>
<xsl:when test="X"><xsl:value-of select="X[1]"/></xsl:when>
<xsl:otherwise><xsl:value-of select="Y[1]"/></xsl:when>
</xsl:choose>

....
<xsl:choose>
<xsl:when test="X[@attribute1='value1'][@attr2='value2']...[@attr99='value99']">
<xsl:value-of select="X[@attribute1='value1'][@attr2='value2']...[@attr99='value99'][1]">
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="Y[@attribute1='value1'][@attr2='value2']...[@attr99='value99'][1]">
</xsl:otherwise>
</xsl:choose>

Not sure if this is what you're looking for, but hopefully it gives you the right ideas.

Posttop
Tony LavinioSubject: Problem getting only a single node and need an ELSE structure
Author: Tony Lavinio
Date: 14 Aug 2007 07:40 PM
In XSLT 2, it's very simple:
(A|B)[1]

To give a more concrete example, for the XML
<root>
<A x="1"/>
<A x="2"/>
<B x="1"/>
<B x="2"/>
<B x="3"/>
</root>

assuming your context were /root, this would find the first
A that had its @x attribute set to "3", or, failing that, the
first B that had its @x attribute set to "3".
(A[@x="3"]|B[@x="3"])[1]

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.