Я привел ниже коды XSL, которые я пробовал, и часть входных и выходных кодов. Если я использую XSL1 для переименования значений префикса пространства имен в тегах xml, к сожалению, он сворачивает значения атрибута, и если я использую XSL2 Атрибуты создаются отдельными узлами. Может кто-нибудь, пожалуйста, помогите написать XSL для переименования префиксов, но сохранить атрибуты в том же узле.
XSL 1:
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ns0:*">
<xsl:element name="ubl:{local-name()}" namespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
XSL2:
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy></xsl:template>
<xsl:template match="@*">
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="ns0:*">
<xsl:element name="ubl:{local-name()}" namespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
Входные данные:
<ns5:LegalMonetaryTotal>
<ns2:LineExtensionAmount currencyID="EUR">35.38</ns2:LineExtensionAmount>
<ns2:TaxExclusiveAmount currencyID="EUR">35.38</ns2:TaxExclusiveAmount>
<ns2:TaxInclusiveAmount currencyID="EUR">37.5</ns2:TaxInclusiveAmount>
<ns2:PrepaidAmount currencyID="EUR">37.5</ns2:PrepaidAmount>
<ns2:PayableAmount currencyID="EUR">0.00</ns2:PayableAmount>
</ns5:LegalMonetaryTotal>
Выходные данные:
<cac:LegalMonetaryTotal >
<cbc:LineExtensionAmount >EUR35.38</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount >EUR35.38</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount >EUR37.5</cbc:TaxInclusiveAmount>
<cbc:PrepaidAmount >EUR37.5</cbc:PrepaidAmount>
<cbc:PayableAmount >EUR0.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
Выходные данные:
<cac:LegalMonetaryTotal >
<cbc:LineExtensionAmount >
<currencyID>EUR</currencyID>
35.38
</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount >
<currencyID>EUR</currencyID>
35.38
</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount >
<currencyID>EUR</currencyID>
37.5
</cbc:TaxInclusiveAmount>
<cbc:PrepaidAmount >
<currencyID>EUR</currencyID>
37.5
</cbc:PrepaidAmount>
<cbc:PayableAmount>
<currencyID>EUR</currencyID>
0.00
</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
Но ожидаемый результат: я перепробовал несколько вариантов, ребята. Пожалуйста, помогите мне получить следующий формат.
<cbc:LegalMonetaryTotal>
<cac:LineExtensionAmount currencyID="EUR">35.38</cac:LineExtensionAmount>
<cac:TaxExclusiveAmount currencyID="EUR">35.38</cac:TaxExclusiveAmount>
<cac:TaxInclusiveAmount currencyID="EUR">37.5</cac:TaxInclusiveAmount>
<cac:PrepaidAmount currencyID="EUR">37.5</cac:PrepaidAmount>
<cac:PayableAmount currencyID="EUR">0.00</cac:PayableAmount>
</cbc:LegalMonetaryTotal>
С уважением,
Indu