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
David KaplanSubject: Looping through attributes
Author: David Kaplan
Date: 09 Jan 2008 06:44 AM
Originally Posted: 09 Jan 2008 06:42 AM
Hi

I have the following XSLT which I need to convert records to a specific XML format:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:template match="QUERY">
<xsl:for-each select="REC">
<xsl:call-template name="Questions"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="Questions" match="REC">
<xsl:comment><xsl:value-of select="@PARTREF_"/> | <xsl:value-of select="@PATH_"/></xsl:comment>
<Question>
<xsl:attribute name="PartType"><xsl:value-of select="@PARTREF_"/></xsl:attribute>
<xsl:attribute name="Ref"><xsl:value-of select="@REF_"/></xsl:attribute>
<xsl:attribute name="DataType"><xsl:value-of select="@TYPE_"/></xsl:attribute>
<xsl:attribute name="Text">
<xsl:if test="@AVAILABILITY_">[<xsl:value-of select="@AVAILABILITY_"/>]</xsl:if>
<xsl:value-of select="@TEXT_"/>
</xsl:attribute>
</Question>
</xsl:template>
</xsl:stylesheet>


Running the XSLT on:

<REC N="135" PATH_="Property Owners/Core Premises Cover Sections" PARTREF_="20846" REF_="301969" TEXT_="Hidden construction code qualifier wall 1" AVAILABILITY_="Hidden" TYPE_="SingleSelect" FOLLOWS_="143801"/>
<REC N="136" PATH_="Property Owners/Core Premises Cover Sections" PARTREF_="20846" REF_="301970" TEXT_="Hidden construction code qualifier roof 1" AVAILABILITY_="Hidden" TYPE_="SingleSelect" FOLLOWS_="143801"/>
<REC N="137" PATH_="Property Owners/Core Premises Cover Sections/Buildings" PARTREF_="20847" REF_="143834" TEXT_="Excess (£)" TYPE_="Currency2"/>
<REC N="138" PATH_="Property Owners/Core Premises Cover Sections/Buildings" PARTREF_="20847" REF_="143835" TEXT_="Contingencies" TYPE_="MultiSelect"/>

Will yield:

<!--20846 | Property Owners/Core Premises Cover Sections-->
<Question PartType="20846" Ref="301969" DataType="SingleSelect" Text="[Hidden]Hidden construction code qualifier wall 1"/>
<!--20846 | Property Owners/Core Premises Cover Sections-->
<Question PartType="20846" Ref="301970" DataType="SingleSelect" Text="[Hidden]Hidden construction code qualifier roof 1"/>
<!--20847 | Property Owners/Core Premises Cover Sections/Buildings-->
<Question PartType="20847" Ref="143834" DataType="Currency2" Text="Excess (£)"/>
<!--20847 | Property Owners/Core Premises Cover Sections/Buildings-->
<Question PartType="20847" Ref="143835" DataType="MultiSelect" Text="Contingencies"/>

I would like to get it to yield the following:

<!--20846 | Property Owners/Core Premises Cover Sections-->
<Question PartType="20846" Ref="301969" DataType="SingleSelect" Text="[Hidden]Hidden construction code qualifier wall 1"/>
<Question PartType="20846" Ref="301970" DataType="SingleSelect" Text="[Hidden]Hidden construction code qualifier roof 1"/>
<!--20847 | Property Owners/Core Premises Cover Sections/Buildings-->
<Question PartType="20847" Ref="143834" DataType="Currency2" Text="Excess (£)"/>
<Question PartType="20847" Ref="143835" DataType="MultiSelect" Text="Contingencies"/>

How could I go about doing it? Apologise am new to XSLT!

Any help would greatly be appreciated! :)


UnknownConvertProductStructuretoRiskv2Config.xsl

Postnext
(Deleted User) Subject: Looping through attributes
Author: (Deleted User)
Date: 09 Jan 2008 09:02 AM
Hi David,
you could perform a grouping on the PARTREF_ attribute; have a look at http://www.jenitennison.com/xslt/grouping/ for a list of common algorithms.

Hope this helps,
Alberto

Postnext
David KaplanSubject: Looping through attributes
Author: David Kaplan
Date: 09 Jan 2008 11:39 AM
Originally Posted: 09 Jan 2008 11:32 AM
Thanks - that was really useful!

I kind of got it working, but I am now having a problem with mutliple instances showing.

Please see the attached file... I want the <UpdatePart> node only to appear once per REF_.

Output with current XSL:

<!--20742 | Property Owners-->
<Question PartType="20742" Ref="143775" DataType="SingleSelect" Text="Status of entity">
<Actions>
<UpdatePart PartType="20742"/>
</Actions>
<Actions>
<UpdatePart PartType="20742"/>
</Actions>
<Actions>
<UpdatePart PartType="20742"/>
</Actions>
</Question>
<Question PartType="20742" Ref="143776" DataType="Text" Text="Company name"/>
<Question PartType="20742" Ref="143777" DataType="SingleSelect" Text="Title"/>
<Question PartType="20742" Ref="143778" DataType="Text" Text="First name"/>
<Question PartType="20742" Ref="143779" DataType="Text" Text="Surname"/>


UnknownRecords.xml
Records

UnknownConvertProductStructuretoRiskv2Config(1).xsl
XLST

UnknownXSLOutput.xml
Output

Posttop
(Deleted User) Subject: Looping through attributes
Author: (Deleted User)
Date: 10 Jan 2008 04:22 AM
Hi David,
your code actually selects three nodes, the ones having TEXT_ equal to "Title", "First name" and "Surname". If what you really want to output is just a single part type for each 'follow' identifier, you should change the key to be

<xsl:key name="following-question-generators" match="*[@PARTREF_]" use="@FOLLOWS_"/>

and the Action template to just select one item from it

<xsl:for-each select="key('following-question-generators', @REF_)[1]">

Hope this helps,
Alberto

 
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.