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
Steve GlanzelSubject: Conditional processing nodes at the same level
Author: Steve Glanzel
Date: 17 Dec 2004 08:59 AM
I have attached a snippet of an XML file created from rich text. The rich text contains a mixture of paragraphs and bullet pointed paragraphs. What I want to do is transform the rich text file while preserving the same formatting, etc.

I am using the same schemas for both ends of the transform and know the paragraphs (contained in the <par> tags) are bulleted when their def attribute equals 11 and continue to be bulleted until the next <par> tag at that node level has a def attribute other than 11.

In functional programming terms the obvious thing to use would be an xls:if select='@def='11' followed by an "for-each", processing any subsequent <par> tags and then breaking when def!="", but with XSLT I can't do this. And I can't use the node list because the <par(s)> I want to bullet are at the same node level and only differentiated by their def attribute.

Would any one be able to suggest a possible alternative(s), etc I could take.

Thanks for any help!

<par def="10">
<run html="false" highlight="none" readingorder="lefttoright">
<font style="bold" />
The Panel will publish information in accordance with the scheme and shall
monitor and review its operation. Please note:
<par def="11">
this will be a living document, which will be modified and developed in light of public comment and feedback;
sometimes, information may not be provided and the reasons will be given in each instance.
[this scheme is not retrospective, and we do not undertake to publish information held by RPA which was generated before 31 December 2003, the date the Scheme came into force];
<par>information retention periods can vary from class to class.</par>
<par def="6" />
<par>If you have an enquiry about a specific information source, please contact:</par>
<par def="10" />
<par>Customer Relations Unit (CRU)</par>
<par>PO Box 69, Reading,</par>
<par>RG1 3YD,</par>

James DurningSubject: Conditional processing nodes at the same level
Author: James Durning
Date: 17 Dec 2004 05:29 PM
Originally Posted: 17 Dec 2004 12:37 PM
Perhaps you could check backwards? test="(@def = 11) or ((not @def) and (preceding-sibling::par[@def]/@def=11))"

Ivan PedruzziSubject: Conditional processing nodes at the same level
Author: Ivan Pedruzzi
Date: 17 Dec 2004 03:24 PM
Hi Steve

The following method is one of the possible solutions;

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<body><xsl:apply-templates select="root/par[1]"/></body>

<xsl:template match="par[@def!='11' and @def]">
<p><xsl:copy-of select="."/></p>
<xsl:apply-templates select="following-sibling::par[1]"/>

<xsl:template match="par[@def='11']">
<li><p><xsl:copy-of select="."/></p></li>
<xsl:apply-templates select="following-sibling::par[1]" mode="bulleted"/>
<xsl:apply-templates select="following-sibling::par[@def][1]"/>

<xsl:template match="par[not(@def)]" mode="bulleted">
<li><p><xsl:copy-of select="."/></p></li>
<xsl:apply-templates select="following-sibling::par[1][not(@def)]" mode="bulleted"/>

<xsl:template match="par[not(@def)]">
<p><xsl:copy-of select="."/></p>
<xsl:apply-templates select="following-sibling::par[1]"/>


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!  

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.