У меня есть целевые данные на основе XML:
<myTargetData>
<myMap>
<pairs>
<key>KEY_1</key>
<value>
<myMap>
<pairs>
<key>INNER_KEY_1</key>
<value/>
</pairs>
<pairs>
<key>INNER_KEY_2</key>
<value/>
</pairs>
<pairs>
<key>INNER_KEY_3</key>
<value>
<myMap>
<pairs>
<key>INNER_INNER_KEY_1</key>
<value/>
</pairs>
<pairs>
<key>INNER_INNER_KEY_2</key>
<value/>
</pairs>
</myMap>
</value>
</pairs>
</myMap>
</value>
</pairs>
<pairs>
<key>KEY_2</key>
<value>
<myString>test string 2</myString>
</value>
</pairs>
<pairs>
<key>KEY_3</key>
<value>
<myString>test string 3</myString>
</value>
</pairs>
<pairs>
<key>KEY_4</key>
<value>
<myString>test string 4</myString>
</value>
</pairs>
</myMap>
</myTargetData>
Список полей конфигурации:
<myFieldData>
<field>KEY_1</field>
<field>INNER_KEY_2</field>
<field>INNER_INNER_KEY_1</field>
<field>KEY_3</field>
<myFieldData>
Значение поля конфигурации означает, что целевой XML должен быть дополнен следующими двумя парами:
<pairs>
<key>{key name}_appendix1</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>{key name}_appendix2</key>
<value><myString>smth text</myString></value>
</pairs>
Результат после преобразования должен быть:
<myTargetData>
<myMap>
<pairs>
<key>KEY_1</key>
<value>
<myMap>
<pairs>
<key>INNER_KEY_1</key>
<value/>
</pairs>
<pairs>
<key>INNER_KEY_2</key>
<value/>
</pairs>
<pairs>
<key>INNER_KEY_2_appendix1</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>INNER_KEY_2_appendix2</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>INNER_KEY_3</key>
<value>
<myMap>
<pairs>
<key>INNER_INNER_KEY_1</key>
<value/>
</pairs>
<pairs>
<key>INNER_INNER_KEY_1_appendix1</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>INNER_INNER_KEY_1_appendix2</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>INNER_INNER_KEY_2</key>
<value/>
</pairs>
</myMap>
</value>
</pairs>
</myMap>
</value>
</pairs>
<pairs>
<key>KEY_1_appendix1</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>KEY_1_appendix2</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>KEY_2</key>
<value>
<myString>test string 2</myString>
</value>
</pairs>
<pairs>
<key>KEY_3</key>
<value>
<myString>test string 3</myString>
</value>
</pairs>
<pairs>
<key>KEY_3_appendix1</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>KEY_3_appendix2</key>
<value><myString>smth text</myString></value>
</pairs>
<pairs>
<key>KEY_4</key>
<value>
<myString>test string 4</myString>
</value>
</pairs>
</myMap>
</myTargetData>
Можно ли это сделать с помощью XQuery? Или лучше использовать XSLT? Если можно - как это сделать? Может рекурсивная функция? Преобразование будет использоваться в Oracle Service Bus.