У меня есть большой главный файл конфигурации XML, который содержит подробную информацию о ряде взаимосвязанных приложений.Большая часть конфигурации является общей для всех приложений, но некоторые части отличаются, например, IP-адреса, строки подключения к базе данных и т. Д.
Я заключил элементы, относящиеся к конкретному приложению, в условное условное element и атрибут используются для определения того, для какого приложения используются вложенные элементы.Это позволяет мне преобразовать главный файл конфигурации для создания необходимого файла конфигурации приложения.
Проблема, с которой я сталкиваюсь, состоит в том, что выходной XML имеет пустые элементы тегов в форме
<add key="Setting3" value="1.2.3.4" />
изменено на
<add key="Setting3" value="1.2.3.4">
</add>
Хотя я понимаю, что это не должно иметь значения, это усложняет диффузию результирующего файла XML с конкретными файлами текущего приложения, которые были созданы вручную.Есть ли что-то, что я могу сделать с моим xslt, чтобы сохранить пустые теги в результатах без изменений?
Мой xslt выглядит следующим образом
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="app" select="''"></xsl:param>
<xsl:output method="xml" indent="yes" version="1.0" encoding="utf-8"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*|comment()|processing-instruction()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="conditional">
<xsl:if test="starts-with(@app,$app))">
<xsl:copy-of select="*|@*|comment()|processing-instruction()"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Пример основного файла конфигурации выглядит следующим образом
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- Common Settings for all applications -->
<add key="Setting1" value="1000" />
<add key="Setting2" value="600" />
<conditional app="App1">
<!-- App1 Settings -->
<add key="Setting3" value="1.2.3.4" />
</conditional>
<conditional app="App2">
<!-- App2 Settings -->
<add key="Setting3" value="1.3.10.10" />
</conditional>
</configuration>
Спасибо
Редактировать:
Изменение xml: output , как предложил Мартин, улучшает вывод, поскольку закрывающий тег теперь добавляется к открывающему тегув той же строке, но я все равно хотел бы, чтобы он сохранял форматирование пустых тегов исходного XML-файла.
Итак
<add key="Setting3" value="1.2.3.4" />
становится
<add key="Setting3" value="1.2.3.4"></add>
Я использую Microsoft msxml.exe версии 3.0 следующим образом
msxml.exe master.config config.xslt app=App1 > App1.config
msxml.exe master.config config.xslt app=App2 > App2.config
Если есть лучший процессор, я подозреваю, что было бы неплохо переключиться на любой другой свободно доступный процессор, работающий в Windows.