Hash the entries in file1 by their English term. Then iterate over the entries in file2, insert or update each entry based on its existence in the hash.

You haven't provided the full XML, so I had to wrap each file into <root>...</root> in order to be able to play with them. I named the first file 1.xml and the second one 2.xml . I then implemented the logic in XML::XSH2:

my $file2 := open 2.xml ; open 1.xml ; my $t := hash langSet[@xml:lang='EN']/tig/term /root/termEntry ; for my $entry in $file2/root/termEntry { my $entry1 = xsh:lookup('t', $entry/langSet[@xml:lang='EN']/tig/te +rm) ; if ($entry1) { for my $lang in $entry/langSet/@xml:lang { if (0 = count($entry1/langSet[@xml:lang=$lang])) cp $lang/.. into $entry1 ; } } else { cp $entry into /root ; } } save :b ;

BTW, I had to remove the </termEntry> before <langSet xml:lang="FR"> in the expected output, I hope that's what you meant.

($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

In reply to Re: Updating XML files by choroba
in thread Updating XML files by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.