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
Nilesh ChavanSubject: need help in XSLT programming
Author: Nilesh Chavan
Date: 17 May 2011 02:23 PM
Hello,

my requirement is to trasnform one form of XML into another form. The i/p data does not have correct levelling and looping. The levels are identified based on the attribute CLASS.

Here's my input data:

<?xml version="1.0"?>
<HTML>
<BODY LANG="EN-US" STYLE="text-justify-trim:punctuation">
<DIV CLASS="WordSection1">
<P CLASS="ahead" STYLE="margin-left:0in;text-indent:0in">A</P>
<P CLASS="ahead" STYLE="margin-left:0in;text-indent:0in"></P>
<P CLASS="Main">
<B>ABSOLUTE DEEDS AS MORTGAGES,</B> 2.01
</P>
<P CLASS="Main"></P>
<P CLASS="Main">
<B>ACCELERATION OF OBLIGATION,</B> 5.01 to5.04. (<I>See</I> <B>DEFAULT AND ACCELERATION OFOBLIGATION</B>)
</P>
<P CLASS="Main"></P>
<P CLASS="Main">
<B>AFFIDAVITS</B>
</P>
<P CLASS="Sub1">Attorneys' fees</P>
<P CLASS="Sub2">Affidavit of independent counsel in support ofaward, Form p. 503</P>
<P CLASS="Sub1">Costs, affidavit as to, Form p. 504</P>
<P CLASS="Sub1">Financial affidavit, Form p. 452</P>
<P CLASS="Sub2">Constructive service</P>
<P CLASS="Sub3">Publication, service by</P>
<P CLASS="Sub4">Affidavit demonstrating due diligence,11.08</P>
<P CLASS="Sub2">Default judgment against defendant who hasn'tanswered</P>
<P CLASS="Sub3">Non-military affidavit, 11.10, Form p.466</P>
<P CLASS="Sub1">Summary judgment motion, affidavits supporting,13.03, Form p. 484</P>
<P CLASS="Sub1"></P>
<P CLASS="Main">
<B>AFFIRMATIVE DEFENSES</B>
</P>
<P CLASS="Sub1">
Avoidances to defenses, 27. (<I>See</I><B>AVOIDANCES</B>)
</P>
<P CLASS="Sub1">
Defenses generally. (<I>See</I><B>DEFENSES</B>)
</P>
<P CLASS="Sub2">Breach of contract, statute of frauds</P>
<P CLASS="Sub3">Affirmative defenses not precluded, 29.03</P>
</DIV>
</BODY>
</HTML>
-------------------------

The corresponding sample o/p is as foollws:

<?xml version="1.0"?>
<em:index>
<title>Index</title>
<title-alt use4="r-running-hd">INDEX</title-alt>
<title-alt use4="l-running-hd">INDEX</title-alt>
<in:body>
<level0>
<letter>A</letter>
<level1><B>ABSOLUTE DEEDS AS MORTGAGES,</B> 2.01</level1>
<level1></level1>
<level1><B>ACCELERATION OF OBLIGATION,</B> 5.01 to5.04. (<I>See</I> <B>DEFAULT AND ACCELERATION OFOBLIGATION</B>)</level1>
<level1></level1>
<level1><B>AFFIDAVITS</B>
<level2> Attorneys' fees
<level3> Affidavit of independent counsel in support ofaward, Form p. 503</level3>
</level2>
<level2> Costs, affidavit as to, Form p. 504 </level2>
<level2> Financial affidavit, Form p. 452
<level3> Constructive service
<level4> Publication, service by
<level5> Affidavit demonstrating due diligence,11.08 </level5>
</level4>
</level3>
<level3> Default judgment against defendant who hasn'tanswered
<level4> Non-military affidavit, 11.10, Form p.466</level4>
</level3>
</level2>
<level2> Summary judgment motion, affidavits supporting,13.03, Form p. 484</level2>
<level2></level2>
</level1>
<level1> AFFIRMATIVE DEFENSES
<level2> Avoidances to defenses, 27. (<I>See</I><B>AVOIDANCES</B>)</level2>
<level2> Defenses generally. (<I>See</I><B>DEFENSES</B>)
<level3> Breach of contract, statute of frauds
<level4> Affirmative defenses not precluded, 29.03</level4>
</level3>
</level2>
</level1>
</level0>
</in:body>
</em:index>
--------------------

I have written an xslt for this but it not able doing the transformation correctly. Please help me with this as this is very urgent and critical.

Her's my sample XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="@* | node()">
<!--<xsl:copy>-->
<xsl:apply-templates select="@* | node() "/>
<!--</xsl:copy>-->
</xsl:template>

<xsl:template match="HEAD"/>
<xsl:template match="B | I">
<xsl:apply-templates/>
</xsl:template>


<xsl:template match="DIV" >
<xsl:copy>
<xsl:apply-templates select="@* | P[@CLASS = 'ahead'] "/>
</xsl:copy>
</xsl:template>

<xsl:template match="P[@CLASS = 'ahead']" >
<xsl:variable name="vContents" select="normalize-space(.)"/>
<xsl:choose>
<xsl:when test="string-length($vContents) &gt; 0" >
<xsl:element name="LEVEL0">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::P" />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="following-sibling::P"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="P[@CLASS = 'Main']" >
<xsl:variable name="vContents" select="normalize-space(.)"/>
<xsl:choose>
<xsl:when test="string-length($vContents) &gt; 0" >
<xsl:element name="LEVEL1">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
<!--<xsl:apply-templates select="following-sibling::P[@CLASS = 'Sub1'] " />-->
<xsl:apply-templates select="following-sibling::P[1][not(@CLASS = 'Main')] " />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="LEVEL1"></xsl:element>
<xsl:apply-templates select="following-sibling::P[1][not(@CLASS = 'Main')] " />

</xsl:otherwise>
</xsl:choose>

</xsl:template>

<xsl:template match="P[@CLASS = 'Sub1']" >
<xsl:variable name="vContents" select="normalize-space(.)"/>
<xsl:choose>
<xsl:when test="string-length($vContents) &gt; 0" >
<xsl:element name="LEVEL2">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::P[1][not(@CLASS = 'Sub1')]" />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="following-sibling::P[1][not(@CLASS = 'Sub1')] " />
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="P" >
<xsl:variable name="Curr_Level" select="translate(@CLASS, 'Sub', '') + 1"/>
<xsl:variable name="Prec_Level">
<xsl:value-of select="translate(preceding-sibling::P[1]/@CLASS, 'Sub', '') + 1 "/>
</xsl:variable>
<xsl:variable name="Foll_Level">
<xsl:value-of select="translate(following-sibling::P[1]/@CLASS, 'Sub', '') + 1"/>
</xsl:variable>

<xsl:variable name="vTempLevel" select="concat('Sub',$Curr_Level)"/>

<xsl:choose>
<xsl:when test="$Prec_Level &lt; $Curr_Level">
<xsl:element name="{concat('LEVEL', $Curr_Level)}">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
<xsl:if test="not($Curr_Level &gt; $Foll_Level) ">
<xsl:apply-templates select="following-sibling::P[1][not(@CLASS = 'Sub1')]" />
</xsl:if>
</xsl:element>
</xsl:when>

<xsl:when test="$Prec_Level = $Curr_Level">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
<xsl:if test="not($Curr_Level &gt; $Foll_Level) ">
<xsl:apply-templates select="following-sibling::P[1][not(@CLASS = 'Sub1')]" />
</xsl:if>
</xsl:when>

<xsl:otherwise>
<xsl:element name="{concat('LEVEL', $Curr_Level)}">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
<xsl:if test="not($Curr_Level &gt; $Foll_Level)">
<xsl:apply-templates select="following-sibling::P[1][not(@CLASS = 'Sub1')]" />
</xsl:if>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>


Attaching the sample i/p, o/p and XSLT for ur reference.

Please help me write this XSLT to get the desired o/p. Thanks!!

-Nilesh Chavan.
nilesh.chavan@lexisnexis.com


Unknowninput(16).xml
Input File

Unknownoutput(9).xml
output

Unknownconversion.xsl
my XSLT

Postnext
(Deleted User) Subject: need help in XSLT programming
Author: (Deleted User)
Date: 17 May 2011 04:42 PM
Good Luck, Nilesh. I've been trying to accomplish the same thing and have posted numerous times with no assistance from Stylus Studio. I can't even seem to find documentation to tell me what my errors mean.

I would never, ever recommend Stylus Studio to anyone.

Suzanne

Posttop
Nilesh ChavanSubject: need help in XSLT programming
Author: Nilesh Chavan
Date: 18 May 2011 04:59 PM
I have found the solution. It's working perfectly fine. I know there's lot of manual thing in this but atleast better than nothing :)

 
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.