Не используйте <xsl:element>
и <xsl:attribute>
, кроме , когда имена элементов / атрибутов рассчитываются динамически.Если они исправлены (как в этом случае), просто запишите элементы / атрибуты напрямую.
Эта таблица стилей:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ecg="http://ECG.NOMSInhouse/V1.1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:easeegas.eu:edigas:nominationandmatching:nominationdocument:5:1"
exclude-result-prefixes="ecg xsi"
>
<xsl:output indent="yes" encoding="utf-8" />
<xsl:template match="ecg:TSMessage[ecg:Header/ecg:MsgType/@TypeCode = 'TN']">
<Nomination_Document release="3">
<xsl:comment> ... more processing ... </xsl:comment>
</Nomination_Document>
</xsl:template>
</xsl:stylesheet>
Применимо к этому XML:
<TSMessage xmlns="http://ECG.NOMSInhouse/V1.1.0.0">
<Header>
<MsgNumber Revision="1" MsgNo="840711"/>
<GenerationDate Date="2019-04-16T11:55:22+02:00"/>
<MsgSender Role="ZSH" Label="" CodeAgency="" ID=""/>
<MsgReceiver Role="ZSO" Label="" CodeAgency="" ID=""/>
<MsgType TypeCode="TN"/>
<Subject Text=""/>
<MsgPeriod TimeTo="2019-04-18T06:00:00+02:00" TimeFrom="2019-04-17T06:00:00+02:00"/>
<Contract ContractID=""/>
</Header>
</TSMessage>
дает такой результат:
<?xml version="1.0" encoding="utf-8"?>
<Nomination_Document release="3" xmlns="urn:easeegas.eu:edigas:nominationandmatching:nominationdocument:5:1">
<!-- ... more processing ... -->
</Nomination_Document>
Примечания:
- Я рекомендую предпочесть несколько
<xsl:template match="something specific">
одному <xsl:coose>
, просто потому, что ваш код будет менее глубоко вложенным. - Объявите все пространства имен, которые вы собираетесь использовать, на уровне
<xsl:stylesheet>
. - Вы можете свободно выбирать префиксы пространства имен - я выбрал
ecg
для пространства имен http://ECG.NOMSInhouse/V1.1.0.0
, вы можете выбратьчто-то, что вам нравится больше. - Используйте
exclude-result-prefixes
, чтобы предотвратить появление ненужных объявлений пространства имен в выводе.