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
Posttop
todd jacksonSubject: flatten xml structure then sort output based on attribute value
Author: todd jackson
Date: 03 Aug 2008 08:16 PM
Originally Posted: 03 Aug 2008 08:07 PM
I have a source xml file which erroneously contains a table_field tag within a table_field tag, I have found a solution to break this out or flatten the structure so tha all table_field tags are on the same level.

However I need to be able to sort the order of the output, i.e. the table_field with attribute title='Study_Method' must appear first in the order of the table_fields to the output result tree.

<Root>
<program>
<Tableheading>National Certificate in Business Administration and Computing (Level 3)</Tableheading>
<table_field title="Qualification">
<Tablebold aid:pstyle="Tablebold">
<table_field title="Study_Method">
<Tablebold aid:pstyle="Tablebold">Study Method</Tablebold>
<Tablelight aid:cstyle="Tablelight">Full time or part time</Tablelight>
</table_field>
Qualification
</Tablebold>
<Tablelight aid:cstyle="Tablelight">National Certificate</Tablelight>
</table_field>

<table_field title="Duration">
<Tablebold aid:pstyle="Tablebold">Duration</Tablebold> <Tablelight aid:cstyle="Tablelight">1 year full time</Tablelight>
</table_field>
<table_field title="Applications">
<Tablebold aid:pstyle="Tablebold">Applications</Tablebold>
<Tablelight aid:cstyle="Tablelight">Accepted until the programme is full, apply four weeks prior to start dates</Tablelight>
</table_field>
.........

My XSLT style sheet format needs to be able to correct the above format to this;

<Root>
<program>
<Tableheading>National Certificate in Business Administration and Computing (Level 3)</Tableheading>

<table_field title="Study_Method">
<Tablebold aid:pstyle="Tablebold">Study Method</Tablebold>
<Tablelight aid:cstyle="Tablelight">Full time or part time</Tablelight>
</table_field>

<table_field title="Qualification">
<Tablebold aid:pstyle="Tablebold">Qualification
</Tablebold>
<Tablelight aid:cstyle="Tablelight">National Certificate</Tablelight>
</table_field>

<table_field title="Duration">
<Tablebold aid:pstyle="Tablebold">Duration</Tablebold> <Tablelight aid:cstyle="Tablelight">1 year full time</Tablelight>
</table_field>
.............

My style sheet can correct the above problem but need help in outputting the table_fields starting with the 'Study_Method' table filed.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>


<!-- this will match and every node & attribute copy to output as it parses -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>


<!-- this will match the program node & attribute copy to output when matched against the program node -->
<xsl:template match="program">
<xsl:copy>
<xsl:apply-templates select="Tableheading | table_field/Tablebold/table_field[@title='Study_Method'] | table_field" mode="element-node-mod" />
<!-- this will cause nodes to be suppressed -->
<xsl:apply-templates select="@* | node()"/>

</xsl:copy>
</xsl:template>

<!-- Do not copy table_field/Tablebold/table_field[@title='Study_Method'] | table_field nodes to the output document i.e. doesn't out put the source xml nodes matching tablefields -->
<xsl:template match="Tableheading | table_field/Tablebold/table_field[@title='Study_Method'] | table_field" />

<!-- output the above copied table_fields and their child table_field nodes and copy to the output document -->

<xsl:template match="Tableheading | table_field/Tablebold/table_field[@title='Study_Method'] | table_field" mode="element-node-mod">
<xsl:copy>
<!--<xsl:copy-of select="@*" />-->
<xsl:apply-templates select="@*[not(name()='Study_Method')] | node()"/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

Hope someone can help.

Cheers

 
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.