XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Conferences Close Tree View
+ Stylus Studio Feature Requests (1192)
+ Stylus Studio Technical Forum (14621)
+ Website Feedback (249)
- XSLT Help and Discussion (7625)
-> + how to insert un return in the... (2)
-> + String in a range (5)
-> + To identify the right edition (4)
-> + Flow Control Feature (2)
-> + calling nested external functi... (3)
-> + Replacing commas with a blank (6)
-> + Grouping very urgent . (2)
-> + xsl node number (3)
-> + Wordml intelligence (6)
-> + Preview and backmapping for wo... (5)
-> + XSLT - find line numbers of di... (2)
-> + The last five bytes of a varia... (7)
-> + simple problem but i'm a bit t... (3)
-> + H plz help me (2)
-> + XSLT : Very Urgent Requirement (7)
-> + comparing two xml files (3)
-> + Support for xsl created from w... (4)
-> + Wildcard Param (3)
-> + XSLT OutOfMemoryError (3)
-> + How can I output the filename ... (7)
-> + How do I strip out a comma ast... (8)
-> + xslt current-dateTime() not re... (2)
-> + Exceed the maximum recursion d... (8)
-> + Saxon9 "java.net.ConnectExcept... (2)
-> - Help Required (1)
-> + XSLT Help to get value from Up... (2)
-> + Date Functions (5)
-> + Need to unescape < and > (2)
-> + No Topic (2)
-> + Problem with handling multiple... (3)
-> + Question XPath expression (dis... (2)
-> + New user, basic question (2)
-> + Serializing XML to a string wi... (2)
-> + Node already has a control li... (2)
-> + Trying to access the position ... (5)
-> + XSLT Help (2)
-> + XSLT, Microsoft Access, and re... (4)
-> + saxon:assign usage problem. (5)
-> + Help with XSLT mapping require... (4)
-> + Muenchian Grouping problem (6)
-> + Automatic postprocessing (2)
-> + Problem Setting Variable (3)
-> - Problem Setting Variable (1)
-> + Looping question (14)
-> + Attribute Centeric XML from Re... (2)
-> + How do I do this ? (2)
-> + Accessing an attribute based o... (3)
-> + help needed - using saxon thro... (2)
-> + Grouping Problem still (6)
-> + Use XSL-FO to create tables fr... (6)
-> + taking out a child and (6)
-> + Yet another problem (3)
-> + using XSL-FO to convert PDF (4)
-> + Preventing namespace declarati... (2)
-> + Small problem during conversio... (4)
-> + Problems removing namespaces (2)
-> + Grouping/Following question (4)
-> + Transforming XML into another ... (3)
-> + Help Needes (3)
-> - Help needed! (1)
-> + Conv of DSML Format to XML for... (2)
-> - Regd, entering text in the t... (1)
-> + displaying all the text around... (4)
-> + inserting values into empty ta... (5)
-> + How to get rid of xmlns="" att... (3)
-> + XSLT How to include the '<' sy... (2)
-> - HELP: Functional XSLT Implemen... (1)
-> - Cannot find a matching 1-argum... (1)
-> + XSLT a:? (2)
-> + Attribute Value Concatenation (2)
-> - Why is the WYSIWYG xslt editor... (1)
-> + WebService Call Error: Ref ele... (4)
-> + How to replace value of a fiel... (2)
-> + Schema Validation Problems (3)
-> + Reusing a prior valid value in... (5)
-> + Clutching at straws! (2)
-> + Adding a number to a for each ... (2)
-> + Transform Name Value pairs int... (4)
-> + Transform the XML Scheme with ... (2)
-> + create XML drop down lists (2)
-> + error during stylesheet tutori... (3)
-> + Modify the value in a element ... (2)
-> + Call to extension function fai... (2)
-> + Convert XML Schema to XML - Mi... (2)
-> + How to calculate maximun RowCo... (3)
-> + Help with using not(preceding:... (5)
-> - Please Help me on this XML to ... (1)
-> + Paasing Parameter Values From ... (6)
-> + XSLT Transformation w/ namespa... (3)
-> + For-each select and parameter ... (3)
-> + Using < (less than) operator (5)
-> + Inserting carriage return (spe... (3)
-> + Inserting carriage return (spe... (2)
-> + Help with SerializerTrace erro... (8)
-> + xml to x3d (5)
-> + Exiting processing loop early (2)
-> + Easy way to Convert One source... (3)
-> + XSLT Editor tab missing from D... (2)
-> + Writing strings of characters ... (4)
-> + Adding the content of an eleme... (3)
-- Previous [601-620] [621-640] [641-660] Next
+ XQuery Help and Discussion (2017)
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (364)
+ Stylus Studio Announcements (113)
Topic  
Postnext
mike ratzlaffSubject: Create an element with a variable from a for-each loop
Author: mike ratzlaff
Date: 01 Jul 2004 11:50 AM
Hi, I have an XML file, generated by Doxygen, to describe the classes and functions in my C .h library files. It looks something like this:
<doxygenindex ...>
<compound kind='class'><name>MyClass1</name>
<member><name>MyClass1</name></member>
<member><name>~MyClass1</name></member>
<member><name>MyFunction1</name></member>
<member><name>MyFunction2</name></member>
</compound>
<compound kind='class'><name>MyClass2</name>
<member><name>MyClass2</name></member>
<member><name>~MyClass2</name></member>
<member><name>MyFunction1</name></member>
<member><name>MyFunction2</name></member>
</compound>
</doxygenindex>

I have created an XSLT file:
<ProjectName xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xsl:version="1.0">
<xsl:for-each select="/doxygenindex/compound[attribute::kind='class']">
<Class><xsl:value-of select="name" />
<xsl:for-each select="member[attribute::kind='function']">
<Function><xsl:value-of select="name" /></Function>
</xsl:for-each>
</Class>
</xsl:for-each>
</ProjectName>

That spits this out:
<ProjectName>
<Class>MyClass1
<Function>MyClass1</Function>
<Function>~MyClass1</Function>
<Function>MyFunction1</Function>
<Function>MyFunction1</Function>
</Class>
<Class>MyClass1
<Function>MyClass1</Function>
<Function>~MyClass1</Function>
<Function>MyFunction1</Function>
<Function>MyFunction1</Function>
</Class>
</ProjectName>

But now I would like to know how to write an XSLT to spit this out:
<MyProject>
<MyClass1>
<MyClass1/>
<~MyClass1/>
<MyFunction1/>
<MyFunction2/>
</MyClass1>
<MyClass2>
<MyClass2/>
<~MyClass2/>
<MyFunction1/>
<MyFunction2/>
</MyClass2>
</MyProject>

I think I need to use the <xsl:element> instruction, but I can't figure out how at access the select variable for the name. {$select} gives me an error, and {@select} comes up empty. What should I do?

Postnext
Minollo I.Subject: Re: Create an element with a variable from a for-each loop
Author: Minollo I.
Date: 01 Jul 2004 12:34 PM
Something like this should work for you:

<xsl:template match="/">
<MyProject>
<xsl:apply-templates/>
</MyProject>
</xsl:template>

<xsl:template match="compound[@kind='class']">
<xsl:element name="{name}">
<xsl:apply-templates select="member"/>
</xsl:element>
</xsl:template>

<xsl:template match="member">
<xsl:element name="{name}"/>
</xsl:template>

Note that '~' is not a valid character to be used as part of an element
name; you will have to change it into something else, like this:

<xsl:template match="member">
<xsl:element name="translate(name,'~','D')"/>
</xsl:template>

Hope this helps,
Minollo

Postnext
mike ratzlaffSubject: Re: Create an element with a variable from a for-each loop
Author: mike ratzlaff
Date: 01 Jul 2004 01:27 PM
I ended up trying it a little differently, creating an intermediate variable:
<ProjectName xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xsl:version="1.0">
<xsl:for-each select="/doxygenindex/compound[attribute::kind='class']">
<xsl:variable name='classname'><xsl:value-of select="name" /></xsl:variable>
<xsl:element name='{$classname}'>
<xsl:for-each select="member[attribute::kind='function']">
<xsl:variable name='functionname'><xsl:value-of select="name" /></xsl:variable>
<xsl:element name="{translate($functionname,'~','d')}"/>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</ProjectName>

And you forgot to tell me that I needed to put the translate() function into {}'s, but I got it to go. :)
Thanks for your helpand the quick reply!

The next thing I'm trying to do is instead of translating the tilde to another letter, to replace it completely with a string, such as 'destruct'.
I'm using a choose instruction, but I can't get the comparison to work (concatenating a string (the tilde) to a variable):
<xsl:choose>
<xsl:when test="$functionname=$classname">
<xsl:element name="construct{$classname}"/>
</xsl:when>
<xsl:when test="$functionname='~'$classname">
<xsl:element name="destruct{$classname}"/>
</xsl:when>
<xsl:otherwise>
<xsl:element name="method{$functionname}"/>
</xsl:otherwise>
</xsl:choose>

Postnext
Minollo I.Subject: Re: Create an element with a variable from a for-each loop
Author: Minollo I.
Date: 01 Jul 2004 01:44 PM
>...
>And you forgot to tell me that I needed to put the translate() function
>into {}'s, but I got it to go. :)

Ops, sorry; my mental parsing didn't catch it...

>...
> <xsl:when test="$functionname='~'$classname">
> <xsl:element name="destruct{$classname}"/>
> </xsl:when>

Try this:

<xsl:when test="$functionname=concat('~',$classname)">
<xsl:element name="destruct{$classname}"/>
</xsl:when>

Minollo

Postnext
mike ratzlaffSubject: Re: Create an element with a variable from a for-each loop
Author: mike ratzlaff
Date: 01 Jul 2004 01:56 PM
>Ops, sorry; my mental parsing
>didn't catch it...

It's cool - it forces me to actually read and learn how this works, instead of just copy/pasting your code verbatim.

>Try this:
>
><xsl:when
>test="$functionname=concat('~'
>,$classname)">
><xsl:element
>name="destruct{$classname}"/&g
>t;
></xsl:when>

sweet! That works! Thanks again!

OK, one last thing:
I don't know if this is the nature of XSLT, or just my parser (4xslt command-line for Windows) but the output file doesn't respect my whitespace in the formatting file. Is there a parser option (couldn't find one) or a tag that will force indending (tabs or spaces) and EOLs into the output file?
Right now it's just dumping the entire output end-to-end on a single line, which makes it hard to human-read.

Posttop
Minollo I.Subject: Re: Create an element with a variable from a for-each loop
Author: Minollo I.
Date: 01 Jul 2004 03:10 PM

>...
>I don't know if this is the nature of XSLT, or just my parser (4xslt
>command-line for Windows) but the output file doesn't respect my
>whitespace in the formatting file. Is there a parser option (couldn't
>find one) or a tag that will force indending (tabs or spaces) and EOLs
>into the output file?
>Right now it's just dumping the entire output end-to-end on a single line,
>which makes it hard to human-read.

It is the nature of XSLT.
Adding this to your stylesheet (before defining any xsl:template element)
should help:

<xsl:output method="xml" indent="yes"/>

Minollo

   
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.