@nabijaczleweli a bit late, but I did it.
xmlstarlet sel -E UTF-8 -T -t --var lc=\'qwertyuiopasdfghjklzxcvbnm\' --var uc=\'QWERTYUIOPASDFGHJKLZXCVBNM\' --var cur="translate('$cur', \$lc, \$uc)" --var z="$z" -m '//pozycja[kod_waluty = $cur]' --var 'mul=przelicznik' --var 'cost=translate(kurs_sredni, ",", ".")' --var 'tocur=$z * $mul div $cost' --var 'topln=$z * $cost div $mul' --var 'lcur=string-length(format-number($tocur, "#"))' --var 'lpln=string-length(format-number($topln, "#"))' -v '$z' -o ' zł = ' -v 'str:padding($lpln - $lcur, " ")' -v 'format-number($tocur, "#.0000")' -o ' ' -v '$cur' -n -v '$z' -o ' ' -v '$cur' -o ' = ' -v 'str:padding($lcur - $lpln, " ")' -v 'format-number($topln, "0.0000")' -o ' zł' -n -b "$a" "$b"
Requires $a, $b (files), $cur (currency, even the automated uppercasing is implemented) and $z to be set in the surrounding shell execution environment, like yours. Everything else is done in EXSLT 1.0 and XPath. Outputs nothing if the currency is not found, two lines if it shows up in both lists.
Enjoy!