- измененный вопрос -
Спасибо уже всем, кто предоставил потенциальные решения, но они соответствуют тому, что я уже пробовал, поэтому я предполагаю, что должен был быть более ясным.Я немного расширил XML, чтобы сделать проблему более прозрачной.
XML на самом деле представляет собой компиляцию различных файлов, содержащих переведенный контент, и цель состоит в том, чтобы получить унифицированный документ, содержащий только уникальные английские строки, и(после ручного просмотра и очистки) по одному переведенному для каждой строки, чтобы его можно было использовать для памяти переводов.Вот почему теперь это большой файл с множеством избыточной информации.
Каждая строка содержит основной английский (который может повторяться в файле десятки раз) и варианты перевода.В некоторых случаях это просто, так как все переведенные версии одинаковы, поэтому я бы закончил одной строкой, но в других случаях это могло бы быть более сложным.
Итак, предположим, что сегодня у меня есть 10 строк, содержащихтот же английский контент (# 1), 2 разных немецких варианта, 3 разных французских варианта, а остальные локали только один вариант, который мне нужно получить:
1 Пара с: 1 EN / 2 DE (v1 и v2) / 3 FR (v1, v2 и v3) / ...
И это повторяется для каждого сгруппированного уникального английского значения в моем списке
Модифицированный XML:
<Books>
<!--First English String (#1) with number of potential translations -->
<Para>
<EN>English Content #1</EN>
<DE>German Trans of #1 v1</DE>
<FR>French Trans of #1 v1</FR>
<!-- More locales here -->
</Para>
<Para>
<EN>English Content #1</EN>
<DE>German Trans of #1 v2</DE>
<FR>French Trans of #1 v1</FR>
<!-- More locales here -->
</Para>
<Para>
<EN>English Content #1</EN>
<DE>German Trans of #1 v1</DE>
<FR>French Trans of #1 v2</FR>
<!-- More locales here -->
</Para>
<!--Second English String (#2) with number of potential translations -->
<Para>
<EN>English Content #2</EN>
<DE>German Trans of #2 v1</DE>
<FR>French Trans of #2 v1</FR>
<!-- More locales here -->
</Para>
<Para>
<EN>English Content #2</EN>
<DE>German Trans of #2 v3</DE>
<FR>French Trans of #2 v1</FR>
<!-- More locales here -->
</Para>
<Para>
<EN>English Content #2</EN>
<DE>German Trans of #2 v2</DE>
<FR>French Trans of #2 v1</FR>
<!-- More locales here -->
</Para>
<!--Loads of additional English Strings (#3 ~ #n) with number of potential translations -->
Текущие решения предлагают мне следующий вывод
<Books>
<Para>
<EN>English Content #1</EN>
<DE>German Trans of #1 v1</DE>
<DE>German Trans of #1 v2</DE>
<DE>German Trans of #2 v1</DE>
<DE>German Trans of #2 v3</DE>
<DE>German Trans of #2 v2</DE>
<FR>French Trans of #1 v1</FR>
<FR>French Trans of #1 v1</FR>
<FR>French Trans of #1 v2</FR>
<FR>French Trans of #2 v1</FR>
</Para>
</Books>
Таким образом, беря только первый тег EN, а затем группируя все остальные, независимо от различий между основными английскими строками.Хотя я стремлюсь получить следующее:
<Books>
<!-- First Grouped EN string and linked grouped translations -->
<Para>
<EN>English Content #1</EN>
<DE>German Trans of #1 v1</DE>
<DE>German Trans of #1 v2</DE>
<FR>French Trans of #1 v1</FR>
<FR>French Trans of #1 v2</FR>
</Para>
<!-- Second Grouped EN string and linked grouped translations -->
<Para>
<EN>English Content #2</EN>
<DE>German Trans of #2 v1</DE>
<DE>German Trans of #2 v3</DE>
<DE>German Trans of #2 v2</DE>
<FR>French Trans of #2 v1</FR>
</Para>
<!-- 3d to n Grouped EN string and linked grouped translations -->
</Books>