Сериализатор отвечает за то, испускается ли пустой элемент как <abc></abc>
или <abc/>
, и они в точности эквивалентны. Некоторые сериализаторы не предоставляют никаких опций и всегда будут производить одно или другое.
Но, возможно, вы излучаете пробел между ними; в этом случае вам придется заменить xsl:copy
на что-то другое, не включающее незначительный пробел, например, добавив or text() = ''
к вашему предикату.
Что касается исключения объявления пространства имен xmlns:core
, это зависит от вашего контекста. Он будет сгенерирован всегда, если есть элемент, который требует его внутри вашего типа, или если вы используете XSLT и не исключили пространство имен с атрибутом @exclude-result-prefixes
в корневом элементе <xsl:stylesheet>
. И даже в этом случае, в зависимости от вашей процессорной среды, сериализатор может «решить», что он хочет, чтобы это пространство имен выводилось без необходимости, поскольку оно входило в область действия во входных данных.
Также странно видеть <xsl:copy> ... <xsl:copy-of .../> ... </xsl:copy>
. Вы действительно не должны обернуть copy-of
внутри copy
s. Просто сделай это copy-of
.