xsl-list
[Top] [All Lists]

Re: [xsl] Comparing node-sets or groups. Deep-equal with an exception?

2019-11-06 09:39:42
Using Saxon HE 9.6.0.7 in Oxygen 18.1. Have access to EE and PE that are part 
of Oxygen.


Charles Flanders                                                           
Sr Principal Tech Manual Developer | Vasont Architect | Certified XML Developer
T 717 524 0665 | M 717 668 4370 | 
charles(_dot_)flanders(_at_)baesystems(_dot_)com
BAE Systems | Combat Vehicles | York, Pennsylvania                              
           


-----Original Message-----
From: Martin Honnen martin(_dot_)honnen(_at_)gmx(_dot_)de 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 
Sent: Wednesday, November 6, 2019 10:24 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Comparing node-sets or groups. Deep-equal with an exception?

*** WARNING ***
EXTERNAL EMAIL -- This message originates from outside our organization.


Am 06.11.2019 um 15:50 schrieb Flanders, Charles E (US)
charles(_dot_)flanders(_at_)baesystems(_dot_)com:
I need help with an issue that I haven't come across before and I'm not even 
sure that I have the subject correct. I am working with XSLT 2.0. Please no 
3.0 solutions.


Which XSLT 2 processor do you use, any access to a proprietary "serialize" 
function? Otherwise I guess you will need to write a function computing some 
fingerprint, I think Dimitre has posted solutions on that in the past here.


I have a long list of <mac-group-2lvl>  structures as below. Most are unique. 
However in some cases, they are identical except for the "ref" attribute 
value on the <teref>  element.

Write a function that pushes each element through a mode that strips that 
attribute, then let it serialize the result or compute a fingerprint, then use 
that fingerprint or serialization in group-adjacent or group-by of 
for-each-group, pushing the context node (i.e. first item in a group) through 
the identity transformation with the collected

                       <xsl:with-param name="refs" tunnel="yes"
select="current-group()//terefs/teref"/>

as a tunnel parameter:


   <xsl:template match="mac">
       <xsl:copy>
           <xsl:apply-templates select="@*"/>
           <xsl:for-each-group select="*"
group-adjacent="mf:finger-print(.)">
               <xsl:copy>
                   <xsl:apply-templates>
                       <xsl:with-param name="refs" tunnel="yes"
select="current-group()//terefs/teref"/>
                   </xsl:apply-templates>
               </xsl:copy>
           </xsl:for-each-group>
       </xsl:copy>
   </xsl:template>


and insert it in

   <xsl:template match="teref">
       <xsl:param name="refs" tunnel="yes"/>
       <xsl:sequence select="$refs"/>
   </xsl:template>

--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>