Я пытаюсь написать xsl для преобразования входного xml следующим образом:
<transaction>
<message messagetype='Type1'>
<param name='destination'>
<value>some location</value>
</param>
<param name='payload'>
<value>some message</value>
</param>
</message>
<embeddedTransaction>
<message messagetype='Type1'>
<param name='source'>
<value>Default source</value>
</param>
<param name='destination'>
<value>Default destination</value>
</param>
<param name='payload'>
<value>Default payload message</value>
</param>
<param name='response'/>
<param name='profile'/>
</message>
</embeddedTransaction>
</transaction>
Выше приведен пакет сообщений, в котором данные в дочернем узле <embeddedTransaction>
определяют значения по умолчанию.использовать, если <param>
не предоставлен верхним уровнем <message>
Полученный xml, который я ищу, должен выглядеть следующим образом:
<transaction>
<message messagetype='Type1'>
<param name='source'>
<value>Default source</value>
</param>
<param name='destination'>
<value>some location</value>
</param>
<param name='payload'>
<value>some message</value>
</param>
<param name='response'/>
<param name='profile'/>
</message>
</transaction>
Обратите внимание, как <param name='source'>
заменяется на тот, что в <embeddedTransaction>
, потому что он не был предоставлен на верхнем уровне.То же самое с <param name='response'/>
и <param name='profile'/>
.
Я пытался обойти это, используя вложенные операторы for-each, но способ настройки структуры xml вызывает у меня горе.Кто-нибудь может найти способ обойти это?