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
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Ramon AldanaSubject: XSLT: Traversing XML twice for XML + Text outputs
Author: Ramon Aldana
Date: 10 Jan 2008 10:56 PM
Hello,

I have both routines to traverse an XML and generate a true XML copy + a string concatenation as follows.

To get true XML copy of input document:

<xsl:template match="/">
<xsl:copy><xsl:copy-of select="*|@*"/><xsl:apply-templates/></xsl:copy>
</xsl:template>

To get string concatenation

<xsl:template match="/" >
<xsl:for-each select="procedure/parameters/attributes">
<xsl:if test="position()!=1">,</xsl:if>
@<xsl:value-of select="@name"/> <xsl:value-of select="@type"/> <xsl:if test="@required='No'">= NULL</xsl:if>
</xsl:for-each>
</xsl:template>


The problem is that I need the TEXT generated in the second xsl:template at the bottom of the XML generated by the first xsl:template.


Thanks.

Postnext
Alberto MassariSubject: XSLT: Traversing XML twice for XML + Text outputs
Author: Alberto Massari
Date: 11 Jan 2008 09:35 AM
Hi Ramon,
have you tried merging the two templates into one, one after the other?

Alberto

Posttop
Ramon AldanaSubject: XSLT: Traversing XML twice for XML + Text outputs
Author: Ramon Aldana
Date: 11 Jan 2008 01:59 PM
Thanks for you reply.

Yes, what I find is that inside...

Somehow as I was trying to repro what I did that didn't work according to your sugestion, it sudenly worked.

I believe my problem was that the initial: <xsl:template match="/" > was match-ing "*|@*" which then was doing the traversal for each single element/attribute and it was giving me duplicates all over the place.

Thanks.

For future knowledge here is what I did:

XML:
<procedure name="Reader.GetComponentById" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Users\rborjes\Documents\SD\whos\Databases\Procedures.xsd">
<scope>Public</scope>
<summary>Get a single component by Id</summary>
<parameters>
<attributes type="Int" required="yes" description="Component Id" name="ComponentId"/>
</parameters>
<returns>
<recordset>
<column datatype="varchar(300)" description="Component Name" name="name"/>
<column datatype="varchar(4000)" description="Description" name="description"/>
<column datatype="Int" description="Component Central Id" name="CompCentralId"/>
<column datatype="Int" description="Product Id" name="ProductId"/>
<column datatype="Int" description="Type Id" name="TypeId"/>
<column datatype="Int" description="Group Id" name="GroupId"/>
<column datatype="Int" description="Phase Id" name="PhaseId"/>
<column datatype="nvarchar(30)" description="Product Manager Owner" name="PMOwner"/>
<column datatype="nvarchar(30)" description="Developer Owner" name="DevOwner"/>
<column datatype="nvarchar(30)" description="Test Owner" name="TestOwner"/>
<column datatype="varchar(4000)" description="Comments" name="Comments"/>
</recordset>
<return description="General Error" value="1"/>
<return description="Success" value="0"/>
</returns>
<sample>
<description/>
<code/>
</sample>
</procedure>


XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>





<xsl:template match="/" >
<xsl:copy><xsl:copy-of select="*|@*"/><xsl:apply-templates/></xsl:copy>
CREATE procedure <xsl:value-of select="procedure/@name"/>
<xsl:for-each select="procedure/parameters/attributes">
<xsl:if test="position()!=1">,</xsl:if>
@<xsl:value-of select="@name"/><xsl:text> </xsl:text><xsl:value-of select="@type"/> <xsl:if test="@default !='' "> = <xsl:value-of select="@default"/></xsl:if>
</xsl:for-each>
WITH EXECUTE AS CALLER AS BEGIN


SELECT <xsl:for-each select="procedure/returns/recordset/column"><xsl:if test="position()!=1">,</xsl:if>CAST(0 AS <xsl:value-of select="@datatype"/>) AS <xsl:value-of select="@name"/></xsl:for-each>

</xsl:template>


</xsl:stylesheet>


OUTPUT:
<procedure xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Reader.GetComponentById" xsi:noNamespaceSchemaLocation="C:\Users\rborjes\Documents\SD\whos\Databases\Procedures.xsd"> <scope>Public</scope>
<summary>Get a single component by Id</summary>
<parameters>
<attributes type="Int" required="yes" description="Component Id" name="ComponentId"/>
</parameters>
<returns>
<recordset>
<column datatype="varchar(300)" description="Component Name" name="name"/>
<column datatype="varchar(4000)" description="Description" name="description"/>
<column datatype="Int" description="Component Central Id" name="CompCentralId"/>
<column datatype="Int" description="Product Id" name="ProductId"/>
<column datatype="Int" description="Type Id" name="TypeId"/>
<column datatype="Int" description="Group Id" name="GroupId"/>
<column datatype="Int" description="Phase Id" name="PhaseId"/>
<column datatype="nvarchar(30)" description="Product Manager Owner" name="PMOwner"/>
<column datatype="nvarchar(30)" description="Developer Owner" name="DevOwner"/>
<column datatype="nvarchar(30)" description="Test Owner" name="TestOwner"/>
<column datatype="varchar(4000)" description="Comments" name="Comments"/>
</recordset>
<return description="General Error" value="1"/>
<return description="Success" value="0"/>
</returns>
<sample>
<description/>
<code/>
</sample>
</procedure>PublicGet a single component by Id
CREATE procedure Reader.GetComponentById
@ComponentId Int
WITH EXECUTE AS CALLER AS BEGIN


SELECT CAST(0 AS varchar(300)) AS name,CAST(0 AS varchar(4000)) AS description,CAST(0 AS Int) AS CompCentralId,CAST(0 AS Int) AS ProductId,CAST(0 AS Int) AS TypeId,CAST(0 AS Int) AS GroupId,CAST(0 AS Int) AS PhaseId,CAST(0 AS nvarchar(30)) AS PMOwner,CAST(0 AS nvarchar(30)) AS DevOwner,CAST(0 AS nvarchar(30)) AS TestOwner,CAST(0 AS varchar(4000)) AS Comments










 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
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.