Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - Re: does xpath expressions/matches support variables? [Thread Next] Re: does xpath expressions/matches support variables?To: NULL Date: 6/5/2006 12:44:00 AM stoj wrote: > I'm a little confused by your statement that XSL can't generate dynamic XSL. > Aren't the following (valid) alternative uses of a variable also examples of > dynamic behaviour, whereby the generated XSL/HTML code changes as it is > processed?; > a) assigned element text value to the variable > b) supply as an argument to an xpath function, eg. concat($var, ".ext")? > > eg. snippet of relevant XML > <root> > <bearerTable> > <bearer> > <name>ethernet</name> > ...other elements > </bearer> > <bearer> > <name>ppp</name> > ...other elements > </bearer> > </bearerTable> > > <networkTable> > <network> > <name>home</name> > <bearerRef>bearer.ppp</bearerRef> > ...other elements > </network> > <network> > <name>work</name> > <bearerRef>bearer.ethernet</bearerRef> > ...other elements > </network> > </networkTable> > </root> > > What i'm trying to do is translate above xml into html as follows; > a) marking up all <name> elements as anchors, eg. <a name="bearer.ethernet"> > b) marking up all <xxxxxRef> elements as anchor references, eg. <a > href="#bearer.ethernet"> > > Easy enough, except that before i create the anchor references, i want to > check if the specified xml bearer element actually exists first. > eg. xsl with bearer ref as current context > <!-- using some string xpath fns; concat, substring-before, etc. to create a > string variable that holds a valid xpath like; > $ref=/root/bearerTable/bearer/name/ethernet --> > <xsl:if test="$ref"> > ...create anchor reference > </xsl:if> > > One alternative i've found is to explicitly check each <name> value in a > xsl:for-each loop, but in my view this is very messy & slow(?). Personally, > i'd prefer to let XSL do the hardwork and use it's XPath pattern matching... > but is this possible when the XPath argument is supplied as a variable? > > cheers > stoj Something along these lines, perhaps: <xsl:template match="network"> <xsl:variable name="refName" select="substring-after(bearerRef,'.')"/> <xsl:if test="/root/bearerTable/bearer/name[. = $refName]"> <a href="#bearer.{$refName}"><xsl:value-of select="name"/></a> </xsl:if> </xsl:template> | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
