xsl-list
[Top] [All Lists]

Re: [xsl] create xml from incoming xml and load it into a variable

2008-07-25 13:37:57
Thank you.

I did this using:
        <xsl:template match="root">
          <xsl:variable name="var">
            <xsl:element name="subroot" use-attribute-sets="id">
                <xsl:apply-templates select="bbb"/>
            </xsl:element>
          </xsl:variable>
          
          <!--Traverse the variable-->
          <xsl:for-each select="xalan:nodeset($var)/root/subroot">
            <xsl:key name="ccc" match="subroot" use="11"/> ===> ERROR!!!!
          </xsl:for-each>
        </xsl:template>

Sample xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>    
    <subroot id="11111">
        <ccc>11</ccc>
        <ddd>2005-08-26</ddd>
        <eee>aaaaaaaa</eee>
    </subroot>
    <subroot id="11111">
        <ccc>22</ccc>
        <ddd>2005-08-26</ddd>
        <eee>aaaaaaaa</eee>
    </subroot>
    <subroot id="11111">
        <ccc>11</ccc>
        <ddd>2005-08-26</ddd>
        <eee>aaaaaaaa</eee>
    </subroot>
</root> 

Inside the loop, I need to use  <xsl:key name="ccc" match="subroot" 
use="ccc"/>. 
But while transforming, I am receiving the following error:

xsl:key is not allowed in this position in the stylesheet!

How do I use "key" tag inside a variable which contains xml?

I appreciate your help.


--- On Fri, 7/25/08, Andrew Welch 
<andrew(_dot_)j(_dot_)welch(_at_)gmail(_dot_)com> wrote:

From: Andrew Welch <andrew(_dot_)j(_dot_)welch(_at_)gmail(_dot_)com>
Subject: Re: [xsl] create xml from incoming xml and load it into a variable
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Date: Friday, July 25, 2008, 6:02 AM
2008/7/25 sudheshna iyer <sudheshnaiyer(_at_)yahoo(_dot_)com>:
How do I create xml from incoming xml and load it into
a variable from xsl? Afterr loading I

have to loop through the variable for doing more xsl
transformations?

My xsl has incoming xml. I have to create another xml
of different format, put it in a variable
and loop through that variable to apply more xsl
transformations.


Do the first pass in a variable:

<xsl:variable name="first-pass">
  <xsl:apply-templates mode="first-pass"/>
</xsl:variable>

The do the second pass by calling apply-templates on the
first pass:

<xsl:apply-templates select="$first-pass"/>

...or something similar - you may want to mode the second
pass if it's
less work.  Remember to have two root match templates, one
moded, to
ensure do don't get infinite recursion.

If the first pass could be a one-off batch process, then
you're better
off separating out the transforms than repeatedly doing the
first pass
each time.

-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/

--~------------------------------------------------------------------
XSL-List info and archive: 
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to:
http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


      

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--