Subject: Re: Re: Sorting and Merge
From: Dongling Ding <dling61@xxxxxxxxx>
Date: Tue, 18 Nov 2003 10:35:37 -0800 (PST)
|
Thanks for this new approach. We tried it and it is
easier than we thought.
Dongling
--- Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> > We have a member structure and allow users to
> define
> > filters based on it. We can generate the result
> after
> > applying those filters. But the problem is that
> result
> > is messed up since the filter was applied
> > sequentially.
>
> [snip]
>
> > After those filters are applied sequentially, we
> got
> > the following result, but it contains duplicated
> > members and order of members is not the same as
> > original one.
>
> [snip]
>
> > But we need
> > to go down each level and figure out the
> > position(recursive)and get rid of duplicate
> members.
> > This transformation seems doing merge and sorting.
> > Please help me on this!
>
> This can be done much easier if you transform the
> original document and use
> the "messed" result of the searches as criteria
> which nodes from the
> original document should be copied.
>
> Something like this:
>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:output omit-xml-declaration="yes"
> indent="yes"/>
> <xsl:strip-space elements="*"/>
>
> <xsl:template match="doc/MemberList">
> <MemberList>
> <xsl:apply-templates/>
> </MemberList>
> </xsl:template>
>
> <xsl:template match="Member[ancestor::doc]">
> <xsl:if test="/*/results/descendant::Member
> [@name =
> current()/@name]">
> <xsl:copy>
> <xsl:copy-of select="@*"/>
> <xsl:apply-templates/>
> </xsl:copy>
> </xsl:if>
> </xsl:template>
> </xsl:stylesheet>
>
> When the above transformation is performed on this
> source.xml (the original
> xml document appended with the search results):
>
> <search>
> <doc>
> <MemberList>
> <Member name="P1">
> <Member name="P11">
> <Member name="P111"/>
> </Member>
> <Member name="P12">
> <Member name="P121"/>
> </Member>
> </Member>
> <Member name="P2">
> <Member name="P21"/>
> <Member name="P22"/>
> </Member>
> </MemberList>
> </doc>
> <results>
> <MemberList>
> <Member name="P1">
> <Member name="P12">
> <Member name="P121"/>
> </Member>
> </Member>
> <Member name="P2">
> <Member name="P21"/>
> <Member name="P22"/>
> </Member>
> <Member name="P1">
> <Member name="P11"/>
> <Member name="P12"/>
> </Member>
> </MemberList>
> </results>
> </search>
>
> the wanted result is produced:
>
> <MemberList>
> <Member name="P1">
> <Member name="P11"/>
> <Member name="P12">
> <Member name="P121"/>
> </Member>
> </Member>
> <Member name="P2">
> <Member name="P21"/>
> <Member name="P22"/>
> </Member>
> </MemberList>
>
>
> Hope this helped!
>
>
> =====
> Cheers,
>
> Dimitre Novatchev.
> http://fxsl.sourceforge.net/ -- the home of FXSL
>
>
>
> "Dongling Ding" <dling61@xxxxxxxxx> wrote in message
>
news:20031117194453.92821.qmail@xxxxxxxxxxxxxxxxxxxxxxxxxx
> > Thank Dimitre,
> >
> > Let me give a clearer description of the problem.
> >
> > We have a member structure and allow users to
> define
> > filters based on it. We can generate the result
> after
> > applying those filters. But the problem is that
> result
> > is messed up since the filter was applied
> > sequentially.
> >
> >
> > Here is an example of the original member
> structure.
> > The actual structure can be very deep in terms of
> > hierarchy.
> >
> >
> > <MemberList>
> > <Member name="P1">
> > <Member name="P11">
> > <Member name="P111"/>
> > </Member>
> > <Member name="P12">
> > <Member name="P121"/>
> > </Member>
> > </Member>
> > <Member name="P2">
> > <Member name="P21"/>
> > <Member name="P22"/>
> > </Member>
> > </MemberList>
> >
> > Here there are three filers created by user:
> >
> > 1. select the member name "P121" and its
> ancestors.
> > They are P121, P12, and P1.
> > 2. select the member name "P2" and its children.
> They
> > are P2, P21, and P22.
> > 2. select the member name "P1" and its children.
> So,
> > P1, P11, and P21,
> >
> > After those filters are applied sequentially, we
> got
> > the following result, but it contains duplicated
> > members and order of members is not the same as
> > original one.
> >
> > <MemberList>
> > <Member name="P1">
> > <Member name="P12">
> > <Member name="P121"/>
> > </Member>
> > </Member>
> > <Member name="P2">
> > <Member name="P21"/>
> > <Member name="P22"/>
> > </Member>
> > <Member name="P1">
> > <Member name="P11"/>
> > <Member name="P12"/>
> > </Member>
> > </MemberList>
> >
> > Therefore, the transformation requirement is to
> merge
> > and reorder the above result based on the original
> > member structure. Dimitre suggested earlier to add
> one
>
=== message truncated ===
__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|