[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: How to make this XSLT works for more than two sect

Subject: RE: How to make this XSLT works for more than two section
From: Robby Pelssers <Robby.Pelssers@xxxxxxx>
Date: Fri, 15 Jun 2012 17:43:58 +0200
RE:  How to make this XSLT works for more than two sect
Try this one... added a few functions to ease the pain:

<?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:custom="www.company.com">

    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:function name="custom:equalPredecingItemCount" as="xs:integer">
      <xsl:param name="preceding_items"/>
      <xsl:param name="this_item"/>
      <xsl:value-of select="sum(for $item in $preceding_items return
custom:getEqualityValue($item, $this_item))"/>
    </xsl:function>

    <xsl:function name="custom:getEqualityValue" as="xs:integer">
      <xsl:param name="item1"/>
      <xsl:param name="item2"/>
      <xsl:value-of select="if (deep-equal($item1, $item2)) then 1 else 0"/>
    </xsl:function>

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

    <!-- we skip the item if it has at least 1 equal preceding item  -->
    <xsl:template
match="item1[custom:equalPredecingItemCount(preceding::item1, .) > 0]"/>

</xsl:stylesheet>

-----Original Message-----
From: Wolfgang Laun [mailto:wolfgang.laun@xxxxxxxxx]
Sent: Wednesday, June 13, 2012 2:43 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re:  How to make this XSLT works for more than two section

I find that I get the desired output, except for the last item1, which
is also removed, but that has a matching predecessor, i.e., the second
item1 in the output.
-W

On 13/06/2012, Jo Na <jkoe888@xxxxxxxxx> wrote:

> And desired Output:
> <myroot>
>     <RNC>
>         <nodeA id="a">
>             <section id="i">
>                 <item1 id="0" method="delete"/>
>                 <item1 id="1" method="create">
>                     <otherchild>a</otherchild>
>                 </item1>
>             </section>
>             <section id="i">
>                 <item1 id="0" method="delete"> <!-- third consecutive
> delete BUT children have different value , so we don't remove this -->
>                     <somechild>bbb</somechild>
>                 </item1>
>                 <item1 id="3" method="create">
>                     <other>xx</other>
>                 </item1>
>                 <item1 id="0" method="create">
>                     <otherchild>a</otherchild>
>                 </item1>
>             </section>
>             <section id="i">
>                 <item1 id="1" method="create">
>                     <otherchild>a</otherchild>
>                 </item1>
>             </section>
>         </nodeA>
>     </RNC>
> </myroot>
>
> How to fix the XSLT to apply to more than two sections with the same
> id as shown on the example. (right now the algorithm works fine for
> only two sections with the same id)
>
> The objective is to remove node with successive duplicate with the
> same element name item1 item2 etc, same id and same method.
> An XML node followed by other node with exact same element name, same
> id, same method and same children will be considered duplicate.
> if the two nodes being compared did not share the same 'nodeA' level
> node, then they should not be considered as duplicates to be removed
>
> Thank you.
> Jo

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.