The Tall Rd items are different than the Short Rd items.

I'm trying to de-dupe the items with the caveat that if the testVal tag is set,

then collapse all identical items containing a blank testVal tag.
<results>
 <item>
    <addr>24 Short Rd</addr>
    <city>Baltimore</city>
    <state>MD</state>
    <testVal>TEST1</testVal>
 </item>
 <item>
    <addr>55 Tall Rd</addr>
    <city>Orlando</city>
    <state>FL</state>
    <testVal/>
 </item>
</results>




 -Tony



 

> Date: Wed, 17 Feb 2010 11:31:54 -0500
> To: [email protected]
> From: [email protected]
> Subject: RE: [MarkLogic Dev General] Distinct Nodes/Value Functions
> 
> At 2010-02-17 07:38 -0500, Tony Mariella wrote:
> >Looks like I was wrong..
> >
> >When I use the distinct-nods local function:
> > declare function local:distinct-nodes ($arg as node()*) as node()*
> > {
> > let $result :=
> > for $a at $apos in $arg
> > where every $other in $arg except $a satisfies not(deep-equal($other,$a))
> > return $a
> > return if( count($result) = 0 ) then $arg[1] else $result
> > };
> >
> ><results>
> > { local:distinct-nodes( doc('tony.xml')/results/item ) }
> > </results>
> >
> >My result looks like this:
> ><results>
> > <item>
> > <addr>24 Short Rd</addr>
> > <city>Baltimore</city>
> > <state>MD</state>
> > <testVal/>
> > </item>
> ></results>
> >
> >I want it to look like this:
> ><results>
> > <item>
> > <addr>24 Short Rd</addr>
> > <city>Baltimore</city>
> > <state>MD</state>
> > <testVal>TEST1</testVal>
> > </item>
> ></results>
> 
> Interesting ... I just ran it again as I had in my original post to 
> you (though I confess for expediency I'm not using the MarkLogic 
> processor) and I get the results you want:
> 
> T:\ftemp>type tony.xml
> <results>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal/>
> </item>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal/>
> </item>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal/>
> </item>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal>TEST1</testVal>
> </item>
> </results>
> 
> T:\ftemp>xquery tony.xq
> <?xml version="1.0" encoding="UTF-8"?>
> <results>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal>TEST1</testVal>
> </item>
> </results>
> T:\ftemp>type tony.xq
> declare function local:distinct-nodes ($arg as node()*) as node()*
> {
> let $result :=
> for $a at $apos in $arg
> where every $other in $arg except $a satisfies not(deep-equal($other,$a))
> return $a
> return if( count($result) = 0 ) then $arg[1] else $result
> };
> 
> <results>
> { local:distinct-nodes( doc('tony.xml')/results/item ) }
> </results>
> T:\ftemp>
> 
> >If I add another group of tags like this:
> ><results>
> > <item>
> > <addr>24 Short Rd</addr>
> > <city>Baltimore</city>
> > <state>MD</state>
> > <testVal/>
> > </item>
> > <item>
> > <addr>24 Short Rd</addr>
> > <city>Baltimore</city>
> > <state>MD</state>
> > <testVal/>
> > </item>
> > <item>
> > <addr>24 Short Rd</addr>
> > <city>Baltimore</city>
> > <state>MD</state>
> > <testVal>TEST1</testVal>
> > </item>
> > <item>
> > <addr>55 Tall Rd</addr>
> > <city>Orlando</city>
> > <state>FL</state>
> > <testVal/>
> > </item>
> > <item>
> > <addr>55 Tall Rd</addr>
> > <city>Orlando</city>
> > <state>FL</state>
> > <testVal/>
> > </item>
> > <item>
> > <addr>55 Tall Rd</addr>
> > <city>Orlando</city>
> > <state>FL</state>
> > <testVal/>
> > </item>
> ></results>
> >This is what I want my result to look like:
> ><results>
> > <item>
> > <addr>24 Short Rd</addr>
> > <city>Baltimore</city>
> > <state>MD</state>
> > <testVal>TEST1</testVal>
> > </item>
> > <item>
> > <addr>55 Tall Rd</addr>
> > <city>Orlando</city>
> > <state>FL</state>
> > <testVal/>
> > </item>
> ></results>
> 
> Why are you including the "Tall Rd" entry when it is not a 
> singleton? There are three "Tall Rd" entries and they are 
> identical. I understood you to want only those items that are not 
> duplicated elsewhere. Because they are duplicates, I get the same 
> result as with the first dataset:
> 
> T:\ftemp>type tony2.xml
> <results>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal/>
> </item>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal/>
> </item>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal>TEST1</testVal>
> </item>
> <item>
> <addr>55 Tall Rd</addr>
> <city>Orlando</city>
> <state>FL</state>
> <testVal/>
> </item>
> <item>
> <addr>55 Tall Rd</addr>
> <city>Orlando</city>
> <state>FL</state>
> <testVal/>
> </item>
> <item>
> <addr>55 Tall Rd</addr>
> <city>Orlando</city>
> <state>FL</state>
> <testVal/>
> </item>
> </results>
> 
> T:\ftemp>xquery tony2.xq
> <?xml version="1.0" encoding="UTF-8"?>
> <results>
> <item>
> <addr>24 Short Rd</addr>
> <city>Baltimore</city>
> <state>MD</state>
> <testVal>TEST1</testVal>
> </item>
> </results>
> T:\ftemp>type tony2.xq
> declare function local:distinct-nodes ($arg as node()*) as node()*
> {
> let $result :=
> for $a at $apos in $arg
> where every $other in $arg except $a satisfies not(deep-equal($other,$a))
> return $a
> return if( count($result) = 0 ) then $arg[1] else $result
> };
> 
> <results>
> { local:distinct-nodes( doc('tony2.xml')/results/item ) }
> </results>
> T:\ftemp>
> 
> 
> Can you please clarify your requirement and state why you think the 
> "Tall Rd" entry belongs in the result?
> 
> . . . . . . . . . . . . Ken
> 
> --
> XSLT/XQuery/XPath training after http://XMLPrague.cz 2010-03-15/19
> XSLT/XQuery/XPath training: San Carlos, California 2010-04-26/30
> Vote for your XML training: http://www.CraneSoftwrights.com/q/i/
> Crane Softwrights Ltd. http://www.CraneSoftwrights.com/q/
> Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
> Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
> Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
> G. Ken Holman mailto:[email protected]
> Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/q/bc
> Legal business disclaimers: http://www.CraneSoftwrights.com/legal
> 
> _______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general
                                          
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to