|
Subject: Re: [xsl] Accessing attribute in a variable with conditional value From: Alan Arnfeld <aarnfeld@xxxxxxxxxxx> Date: Wed, 1 Aug 2007 22:46:42 +0100 (BST) |
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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Accessing attribute in a , Wasiq Shaikh | Thread | RE: [xsl] Accessing attribute in a , Michael Kay |
| Re: [xsl] String-length of substrin, J. Zhang | Date | RE: [xsl] String-length of substrin, Michael Kay |
| Month |