Я пытаюсь отформатировать следующий XML, удаляя все пустые узлы «параметров» (без дочернего узла «ключ»), но если все они пусты, мне нужно создать один. Допустим, мне нужно иметь хотя бы один узел «параметров» для каждого «покрытия»
Ввод XML:
<root>
<coverages>
<parameters>
<enumValues/>
</parameters>
<parameters>
<enumValues/>
</parameters>
<parameters>
<enumValues/>
</parameters>
<id>P01</id>
<name>P01 coverage</name>
<parameters>
<key>key1</key>
<name>Key1 Name</name>
<defaultValue>1</defaultValue>
</parameters>
</coverages>
<coverages>
<parameters>
<enumValues/>
</parameters>
<parameters>
<enumValues/>
</parameters>
<parameters>
<enumValues/>
</parameters>
<id>P03</id>
<name>P03 coverage</name>
</coverages>
</root>
Ожидаемый результат:
<root>
<coverages>
<id>P01</id>
<name>P01 coverage</name>
<parameters>
<key>key1</key>
<name>Key1 Name</name>
<defaultValue>1</defaultValue>
</parameters>
</coverages>
<coverages>
<id>P03</id>
<name>P03 coverage</name>
<parameters>
<key>key2</key>
<name>Key2 Name</name>
<defaultValue>2</defaultValue>
</parameters>
</coverages>
</root>
Я на самом деле застрял с преобразованием для применения, потому что я могу легко удалить пустые узлы, но тогда у меня нет понятия, как добавить один
Я использую следующий шаблон:
<xsl:template match="coverages/parameters[not(descendant::key[not(*)][normalize-space()])]" />
но это только удаляет пустые