[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Accessing attribute in a variable with conditional
this helps me too - excellent --- Wasiq Shaikh <wasiq911@xxxxxxxxxxx> wrote: > Ah, I see! When I printed the variable it "looked" > like a nodeset, so I > assumed I could access the elements and attributes > within. > > This is my working solution after applying Mukul's > suggestion. Thanks Mukul! > > <xsl:variable name="validAttributeType"> > <xsl:if test="key('allTypes', @type)"> > <xsl:copy-of select="key('allTypes', > @type)/xsd:restriction"/> > </xsl:if> > <xsl:if test="xsd:simpleType"> > <xsl:copy-of > select="xsd:simpleType/xsd:restriction"/> > </xsl:if> > </xsl:variable> > <xsl:if test="$validAttributeType!=''"> > <xsl:element name="validValues"> > <xsl:call-template name="trimAttribute"> > <xsl:with-param name="attributeName" > select="'base'"/> > <xsl:with-param name="attribute" > select="xalan:nodeset($validAttributeType)/*/@base"/> > </xsl:call-template> > <xsl:for-each > select="xalan:nodeset($validAttributeType)/*/*"> > <xsl:element name="value"> > <xsl:attribute name="type"> > <xsl:value-of > select="substring-after(name(), > 'xsd:')"/> > </xsl:attribute> > <xsl:value-of select="@value"/> > </xsl:element> > </xsl:for-each> > </xsl:element> > </xsl:if> > > (using XalanJ 2.7/XPath 1.0) > > > ----Original Message Follows---- > > The error you are getting at this line, > <xsl:with-param > name="attribute" > select="$validAttributeType/@base"/> > > is because the variable "validAttributeType" is a > result tree fragment > (it's a special data type defined in XSLT 1.0), and > you are trying to > apply an XPath operation to it; which is not > correct. > > To my opinion, you need to use an extension function > node-set for this > (if you are restricted to XSLT 1.0). > > So for example, something like following will work: > <xsl:with-param name="attribute" > select="xx:node-set($validAttributeType)/xsd:restriction/@base"/> > > (please bind the prefix xx to the required namespace > - please see the > product documentation for this) > > With XSLT 2.0, you will not get the error at all, > for the operation > you are trying to do (because XSLT 2.0 implicitly > treats the contents > of xsl:variable in this case as a node-set). > > On 8/1/07, Wasiq Shaikh <wasiq911@xxxxxxxxxxx> > wrote: > > Hi, > > > > I'm setting a value on a variable using > conditions. The variable must be > a > > node-set so that I can do some processing with > it. > > > > <xsl:variable name="validAttributeType"> > > <xsl:if test="key('allTypes', @type)"> > > <xsl:copy-of select="key('allTypes', > @type)/xsd:restriction"/> > > </xsl:if> > > <xsl:if test="xsd:simpleType" > > <xsl:copy-of > select="xsd:simpleType/xsd:restriction"/> > > </xsl:if> > > </xsl:variable> > > > > The "xsd:restriction" tag has a "base" attribute > that I need to access > and > > send to a template as a parameter. > > > > <xsl:call-template > name="trimAttribute"> > > <xsl:with-param > name="attributeName" select="'base'"/> > > <xsl:with-param name="attribute" > > select="$validAttributeType/@base"/> > > </xsl:call-template> > > > > But it gives me a "XSLT Error > (javax.xml.transform.TransformerException): > > org.apache.xpath.objects.XRTreeFrag" when I try > to do > > > > <xsl:with-param name="attribute" > select="$validAttributeType/@base"/> > > OR > > <xsl:with-param name="attribute"><xsl:copy-of > > > select="$validAttributeType/@base"/></xsl:with-param> > > > > I can print out the variable's contents, which is > correct, but I can't > seem > > to access the attribute. By the way, previously I > had this > > > > <xsl:variable name="validAttributeType" > select="key('allTypes', > > @type)/xsd:restriction"/> > > > > which works! But adding the conditional messed it > up. How can I get the > same > > behaviour as the above line in a conditional > variable? > > > > I appreciate any help. Thank you! > > > -- > Regards, > Mukul Gandhi > > _________________________________________________________________ > Reconnect with Familiar Faces with Windows Live > Spaces > http://spaces.live.com/?mkt=en-ca
|
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
|