RE: Stuck on Name() and variable
> I am having trouble getting an attribute match on name to > work. I'm sure I am missing something silly here, so I hope > someone will see it and point it out to me! > > I have a process where a mapping node tells me the node I > need to read (done through a function call since it uses bit > comparison, this works fine). Once I know the target node I > need to read (either MapKey or MapMD), I then need to get the > attribute from that target node that has the same name as the > attribute I am on in the mapping node. This is where I am > stumped. The correct value is in the variable $AttrName, and > a node of that name exists in the target (MapKey or MapMD), > but the match, attribute::*[name() = $AttrName], is not doing > what I expected it to do. I get a result of > '4()(col13) | ' from the sample output I added to try and > figure out what was going on. So I can see that I have > nothing in the $Pos variable. But I do have an attribute > 'col13' in the MapMD node. > > Can I even do a match on the attribute name against a variable? > > <MapMD col0="0" col13="3" col14="2" col15="1" col16="4" > col17="5" col18="8" col19="7" col20="6" col21="9" col22="10"></MapMD> > Presumably the code below is executed with the <MapMD> element as the context node? > > <xsl:attribute name="data"> > <xsl:variable name="Market" select="node()"/> node() means child::node(): your MapMD element has no children. > <xsl:variable name="Key" select="parent::node()"/> We haven't been told what the parent of the MapMD element is. > <xsl:for-each > select="//Map[@schema]/attribute::*[position() > 2]" > Ouch! The order of attributes is undefined. Selecting all attributes after the second will give you a random set of attribute nodes back. You haven't told us anything about the Map element, so it's hard to say anything more... > <xsl:variable name="AttrName" select="name()"/> > <xsl:choose> > <xsl:when test="bitmask:DeCode(current(), 2) " > No idea what this extension function does... > <xsl:variable name="Pos" > > <xsl:value-of > select="MapKey/@*[name() = $AttrName]" /> Your MapMD element doesn't have a child called MapKey... I give up. Show us your whole source document, your whole stylesheet, and explain what your extension function does. Michael Kay Software AG home: Michael.H.Kay@xxxxxxxxxxxx work: Michael.Kay@xxxxxxxxxxxxxx > </xsl:variable> > 2 - (<xsl:value-of select="$Pos" > />)(<xsl:value-of select="$AttrName" />) <xsl:value-of > select="$Key/attribute::*[$Pos]" /> > </xsl:when> > <xsl:when test="bitmask:DeCode(current(), 4) " > > <xsl:variable name="Pos" > > <xsl:value-of > select="MapMD/attribute::*[name() = $AttrName]" /> > </xsl:variable> > 4(<xsl:value-of select="$Pos" > />)(<xsl:value-of select="$AttrName" />) <xsl:value-of > select="$Market/attribute::*[position() > = $Pos]" /> > </xsl:when> > </xsl:choose> > <xsl:if test = "position() != last()"> | </xsl:if> > </xsl:for-each> > </xsl:attribute> > > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format