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
eg bertSubject: Newbie prob - Elements with same name as parent...
Author: eg bert
Date: 26 Sep 2006 10:37 AM
Hi

I'm reading through a 'todo' list generated by an app. called ToDoList

The 'basic' format of the file is: -

<?xml version="1.0" encoding="UTF-8"?>
<todolist>
<task id="1" title="Task 1">
<task id="1a" title="Task 1a"/>
<task id="1b" title="Task 1b"/>
</task>
<task id="2" title="Task 2">
<task id="2a" title="Task 2a"/>
</task>
</todolist>

So each <task> can have multiple sub tasks

I want to read through the file and output all tasks along with their attributes

I have got this far..


<?xml version="1.0" encoding="UTF-8"?>
<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/2004/07/xpath-functions" xmlns:xdt="http://www.w3.org/2004/07/xpath-datatypes">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/todolist">
<xsl:for-each select="task">
<xsl:sort order="ascending" select="@title"/>
<BR />Top:
<xsl:value-of select="@title"/>
(<xsl:value-of select="@id"/>)
<BR />
<xsl:value-of select="@comments"/>
<xsl:apply-templates select="task"/>
</xsl:for-each>
</xsl:template>
<xsl:template match="task">
<BR />Sub:
<xsl:value-of select="@title"/>
(<xsl:value-of select="@id"/>)
<BR />
<xsl:value-of select="@comments"/>
</xsl:template>
</xsl:stylesheet>


Output: -


Top: Task 1 (1)

Sub: Task 1a (1a)

Sub: Task 1b (1b)

Top: Task 2 (2)

Sub: Task 2a (2a)


but there must be a better way of doing this without repeating myself

Any help is greatly appreciated

Thanks, Eg.

Postnext
James DurningSubject: Newbie prob - Elements with same name as parent...
Author: James Durning
Date: 26 Sep 2006 10:48 AM
Add one line to this template:
<xsl:template match="task">
...
...
<xsl:apply-template match="task"/>
</xsl:template>

Posttop
eg bertSubject: Newbie prob - Elements with same name as parent...
Author: eg bert
Date: 26 Sep 2006 04:45 PM
Thanks very much James, that has picked up all the missing <tasks>.

Is it possible achieve this without outputting the attributes in the first template

<xsl:template match="/todolist">
<xsl:for-each select="task">
<xsl:sort order="ascending" select="@title"/>

+++ This block +++
<BR />Top:
<xsl:value-of select="@title"/>
(<xsl:value-of select="@id"/>)
<BR />
<xsl:value-of select="@comments"/>
--- This block ---
<xsl:apply-templates select="task"/>
</xsl:for-each>
</xsl:template>

so the 'task' templates does all the work?
Thanks Eg.

 
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.