Re: spot/remove repeated elements in XML documet
Manuel Souto Pico <[email protected]>
| Newsgroups | gmane.comp.lang.perl.xml |
|---|---|
| Message-ID | <[email protected]> |
Thank you so much, Jenda, Even if I know more Perl than XSL, your code example looks much more obscure to me, and it looks like applying that to my original file (which is complex) would be veery complicated. I'll try to sort this out with XSL (which has given very good results in the past for other similar things) and, if it doesn't work, I'll try that module suggested by you. Thanks! Best regards, Manuel Jenda Krynicky escribió: > From: Manuel Souto Pico <[email protected]> > >> I have a long XML document in which several branches have repeated >> contents, for example: >> >> <document> >> ... >> <entry ="10"> >> <Eng>house</Eng> >> <Spa>casa</Spa> >> </entry> >> <entry ="11"> >> <Eng>shoe</Eng> >> <Spa>zapato</Spa> >> </entry> >> <entry ="12"> >> <Eng>house</Eng> >> <Spa>casa</Spa> >> </entry> >> ... >> </document> >> >> where as you can see, entries 10 and 12 have identical contents. >> >> My question is: Is there any easy way to spot and/or remove repeated >> elements? I suppose it could be done with XSL or a perl module for XML... >> > > Something like this would work: > > use XML::Rules; > > my $parser = XML::Rules->new( > style => 'filter', > rules => { > _default => 'raw extended', > entry => sub { > my ($tag, $attr, $context, $parents, $parser) = @_; > my $content_string = "$attr->{':Eng'}{_content}$;$attr- > >> {':Spa'}{_content}"; >> > if ($parser->{parameters}{seen}{$content_string}++) { > return > } else { > return $tag => $attr > } > }, > } > ); > > $parser->filter( \*DATA); > > __DATA__ > <document> > <entry id="10"> > <Eng>house</Eng> > <Spa>casa</Spa> > </entry> > <entry id="11"> > <Eng>shoe</Eng> > <Spa>zapato</Spa> > </entry> > <entry id="12"> > <Eng>house</Eng> > <Spa>casa</Spa> > </entry> > </document> > > > > HTH, Jenda > ===== [email protected] === http://Jenda.Krynicky.cz ===== > When it comes to wine, women and song, wizards are allowed > to get drunk and croon as much as they like. > -- Terry Pratchett in Sourcery > > _______________________________________________ > Perl-XML mailing list > [email protected] > To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs > > > _______________________________________________ Perl-XML mailing list [email protected] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs