[xquery-talk] two xml match/diffes
Martin Probst
martin at x-hive.com
Wed Jan 17 11:51:22 PST 2007
> I'm new to the xquery and want to have a query to join
> two xml files to find the matches and differences, e.g
> a.xml:
> <root1>
> <a1>1</a1>
> <a2>3</a2>
> <a3>5</a3>
> </root1>
>
> b.xml:
> <root2>
> <b1>1</b1>
> <b2>2</b2>
> <b3>3</b3>
> </root2>
>
What about:
let $as := doc('a.xml')/root1/*
let $bs := doc('b.xml')/root2/*
let $matches-a := $as[. = $bs]
let $matches-b := $bs[. = $as]
return
<res>
{
<same>
{
for $match in $matches-a
return <match from="{ node-name($match) }">{ string
($match) } </match>
}
</same>,
<root1>{ $as except $matches-a }</root1>,
<root2>{ $bs except $matches-b }</root2>
}
</res>
It returns "match" elements for the matches and stores the original
node name in an attribute. You can of course also create a new
element type for each match, see James' query for that.
Regards,
Martin
More information about the talk
mailing list