[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: create xml from incoming xml and load it into a v
Thank you for the reply. I have the following xsl file: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xalan"> <xsl:key name="keyname" match="subroot" use="ccc"/> <xsl:template match="root"> <xsl:variable name="var"> <xsl:element name="root"> <xsl:element name="subroot"> <xsl:apply-templates select="file_entry"/> </xsl:element> </xsl:element> </xsl:variable> <!--Traverse the variable--> <xsl:for-each select="xalan:nodeset($var)/root"> <xsl:variable name="test" select="key('keyname', '11')"/> <xsl:text>inside root.....: </xsl:text> <xsl:for-each select="$test"> ==============> Why is this test var empty??? <xsl:text>inside test.....: </xsl:text> </xsl:for-each> </xsl:for-each> </xsl:template> <xsl:template match="subroot"> <xsl:element name="subroot"> <xsl:element name="ccc"> <xsl:apply-templates select="ccc" mode="copy"/> </xsl:element> <xsl:element name="ddd"> <xsl:apply-templates select="ddd" mode="copy"/> </xsl:element> <xsl:element name="eee"> <xsl:apply-templates select="eee" mode="copy"/> </xsl:element> </xsl:element> </xsl:template> </xsl:stylesheet> For the following 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> I put the key in xsl:sheet and called where I need. But I am not sure why test variable is empty? Shouldn't it contain two subroots that match from the above xml which has 3 subroots? <subroot id="11111"> <ccc>11</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> --- On Fri, 7/25/08, Michael Kay <mike@xxxxxxxxxxxx> wrote: > From: Michael Kay <mike@xxxxxxxxxxxx> > Subject: RE: create xml from incoming xml and load it into a variable > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Date: Friday, July 25, 2008, 4:57 PM > Well, you can't use xsl:key anywhere other other than as > a child of > xsl:stylesheet. > > How to correct your code depends rather on what you thought > your code was > intended to mean. I suspect you want the xsl:key as > written, but moved to > the right place, and a call on the key() function where you > currently have > the xsl:key element. > > Remember that an xsl:key declaration is not tied to a > specific document or > tree. It's the call on key() that determines which tree > will be searched. > > Michael Kay > http://www.saxonica.com/ > > > -----Original Message----- > > From: sudheshna iyer [mailto:sudheshnaiyer@xxxxxxxxx] > > Sent: 25 July 2008 21:37 > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Subject: Re: create xml from incoming xml and > load it > > into a variable > > > > 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.j.welch@xxxxxxxxx> wrote: > > > > > From: Andrew Welch > <andrew.j.welch@xxxxxxxxx> > > > Subject: Re: create xml from incoming xml > and load it into a > > > variable > > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > > Date: Friday, July 25, 2008, 6:02 AM > > > 2008/7/25 sudheshna iyer > <sudheshnaiyer@xxxxxxxxx>: > > > > 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/
|
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
|