Я пытаюсь написать код XSLT, чтобы добавить префиксные пространства имен ко всем узлам, кроме нескольких.
Пример XML:
<BatchPrepareDeliverArchive xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="schema">
<BatchInformation>
<RqUId>424000000071256187550913330</RqUId>
<BatchFeedId>CMLTREXT4240</BatchFeedId>
<BatchCount>7</BatchCount>
</BatchInformation>
<BatchDeliverArchive>
<Transactions>
<Transaction>
<TransactionUUID>90022016-01-140000001</TransactionUUID>
<CustomerData>
<GBD_Transactions>
<GBD_Transaction>
<Common_Data>
<Transaction_ID>90022016-01-140000001</Transaction_ID>
</Common_Data>
<Templates>
<Template>
<Template_Name>A21_LETTER_FINAL_NOTICE_OF_CANCELLATION_TPA</Template_Name>
<Transaction_ID>90022016-01-140000001</Transaction_ID>
</Template>
</Templates>
</GBD_Transaction>
</GBD_Transactions>
</CustomerData>
<DocInfo>
<Name>OPERATION NAME</Name>
</DocInfo>
</Transaction>
</Transactions>
</BatchDeliverArchive>
</BatchPrepareDeliverArchive>
Я хочу добавить префикс urn ко всем узлам, кроме GBD_Transactions и его дочерних элементов.
Я придумал этот XSLT:
<xsl:stylesheet version="1.0" xmlns:urn="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="urn:{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:element name="urn:{local-name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Здесь трансформируются все узлы, что не является ожидаемым результатом. Был бы признателен за любую помощь в этом!