Re: [xsl] Find inconsistencies: Perl or XSLT?

Subject: Re: [xsl] Find inconsistencies: Perl or XSLT?
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Wed, 01 Dec 2010 15:05:42 +0000
On 01/12/2010 14:46, Manuel Souto Pico wrote:
Dear all,

I need to process some files and I know how to do it in Perl, but as
has happened to be the case in the past with other stuff, perhaps
there's a (objectively) simpler or more efficient way to do it with

I have a file like this

<unit id="1">
<unit id="2">
<unit id="3">
<unit id="4">
<unit id="5">

I think the example is illustrative enough.

The target element contains the translation of the source element, and
one same element must always be translated in the same way, but
sometimes it's not. So what I'd to do is find two or more units with
the same source but with different target (like 2 and 5 in the
example, but unlike 1 and 4).

In Perl I would use a XML module (or not) and put the source elements
in the keys of a hash and the target elements in their corresponding
values. When assigning a new key-value pair, if the key already
exists, I compare the values. If they are equal, they pass, else they
are flagged and included in the report.

The report in this case would be something like:

The following inconsitencies have been found
2: bleble ->  pleple
5: bleble ->  lolailo

Is it possible to do this in XSLT? Is it more efficient that doing it
in Perl as I was planning to? I knowledge of XSLT is very limited and
I can't see beyond transforming a XML file into another XML file.

Thanks a lot for your opinion.

Something like this:

<xsl:for-each-group select="unit" group-by="source">
<xsl:if test="count(distinct-values(current-group()/target)) gt 1">
<conflicts-for source="{current-grouping-key()}">
<xsl:value-of select="distinct-values(current-group()/target)"/>

Michael Kay

Current Thread