Reputation: 25
The problems is that I don't know how to remove xmlns
from an element. So my question is:
How to remove xmlns=""
in the tag NetLineAmount (see "Result XML") in an element?
Source XML:
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Factuur_insbou003.xsd">
<InvoiceLine>
<LineNumber>1</LineNumber>
<DeliveredQuantity>4</DeliveredQuantity>
<DeliveredQuantityMeasureUnitCode>PCE</DeliveredQuantityMeasureUnitCode>
<NumberOfInvoicingUnits>16.8</NumberOfInvoicingUnits>
<NetLineAmount>44.76</NetLineAmount>
<TradeItemIdentification>
<GTIN>08711438159445</GTIN>
<AdditionalItemIdentification>
<TradeItemDescription>Vuren balk 60x150mm lengte 4200mm FSC70</TradeItemDescription>
<Colour>Vuren</Colour>
<PhysicalDimensions>
<MeasurementUnitCode>CMT</MeasurementUnitCode>
</PhysicalDimensions>
</AdditionalItemIdentification>
</TradeItemIdentification>
<TradeItemCertificate>
<CertificateClaimDescription>FSC Mix</CertificateClaimDescription>
</TradeItemCertificate>
<PriceInformation>
<Price>2.96</Price>
<PriceBase>
<NumberOfUnitsInPriceBasis>1</NumberOfUnitsInPriceBasis>
<MeasureUnitPriceBasis>MTR</MeasureUnitPriceBasis>
</PriceBase>
</PriceInformation>
</InvoiceLine>
</Invoice>
Stylesheet XML:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://www.gs1.nl/factuur/insbou/004"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output encoding="UTF-8" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Invoice">
<Invoice xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.gs1.nl/factuur/insbou/004 Factuur_insbou004.xsd">
<xsl:apply-templates/>
</Invoice>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="DeliveredQuantityMeasureUnitCode">
<DeliveredQuantityUoM>
<xsl:apply-templates select="@*|node()"/>
</DeliveredQuantityUoM>
</xsl:template>
<xsl:template match="NetLineAmount">
<xsl:copy-of select="."/>
<VariableOrderConditions>
<VariableCode>LEN</VariableCode>
<NumericValue>2000</NumericValue>
<NumericValueUoM>MMT</NumericValueUoM>
</VariableOrderConditions>
<Operations>
<OperationCode>CLE</OperationCode>
<AlphanumericValue>Poetsen</AlphanumericValue>
<AdditionalInformation>met chroompoets</AdditionalInformation>
<OperationPrice>25</OperationPrice>
</Operations>
</xsl:template>
</xsl:transform>
Result XML (the problem with the result is xmlns=""
in the tag NetLineAmount):
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.gs1.nl/factuur/insbou/004" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gs1.nl/factuur/insbou/004 Factuur_insbou004.xsd">
<InvoiceLine>
<LineNumber>1</LineNumber>
<DeliveredQuantity>4</DeliveredQuantity>
<DeliveredQuantityUoM>PCE</DeliveredQuantityUoM>
<NumberOfInvoicingUnits>16.8</NumberOfInvoicingUnits>
<NetLineAmount xmlns="">44.76</NetLineAmount>
<VariableOrderConditions>
<VariableCode>LEN</VariableCode>
<NumericValue>2000</NumericValue>
<NumericValueUoM>MMT</NumericValueUoM>
</VariableOrderConditions>
<Operations>
<OperationCode>CLE</OperationCode>
<AlphanumericValue>Poetsen</AlphanumericValue>
<AdditionalInformation>met chroompoets</AdditionalInformation>
<OperationPrice>25</OperationPrice>
</Operations>
<TradeItemIdentification>
<GTIN>08711438159445</GTIN>
<AdditionalItemIdentification>
<TradeItemDescription>Vuren balk 60x150mm lengte 4200mm FSC70</TradeItemDescription>
<Colour>Vuren</Colour>
<PhysicalDimensions>
<MeasurementUnitCode>CMT</MeasurementUnitCode>
</PhysicalDimensions>
</AdditionalItemIdentification>
</TradeItemIdentification>
<TradeItemCertificate>
<CertificateClaimDescription>FSC Mix</CertificateClaimDescription>
</TradeItemCertificate>
<PriceInformation>
<Price>2.96</Price>
<PriceBase>
<NumberOfUnitsInPriceBasis>1</NumberOfUnitsInPriceBasis>
<MeasureUnitPriceBasis>MTR</MeasureUnitPriceBasis>
</PriceBase>
</PriceInformation>
</InvoiceLine>
</Invoice>
Wanted result XML (with no xmlns=""
in the tag NetLineAmount):
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.gs1.nl/factuur/insbou/004" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gs1.nl/factuur/insbou/004 Factuur_insbou004.xsd">
<InvoiceLine>
<LineNumber>1</LineNumber>
<DeliveredQuantity>4</DeliveredQuantity>
<DeliveredQuantityUoM>PCE</DeliveredQuantityUoM>
<NumberOfInvoicingUnits>16.8</NumberOfInvoicingUnits>
<NetLineAmount>44.76</NetLineAmount>
<VariableOrderConditions>
<VariableCode>LEN</VariableCode>
<NumericValue>2000</NumericValue>
<NumericValueUoM>MMT</NumericValueUoM>
</VariableOrderConditions>
<Operations>
<OperationCode>CLE</OperationCode>
<AlphanumericValue>Poetsen</AlphanumericValue>
<AdditionalInformation>met chroompoets</AdditionalInformation>
<OperationPrice>25</OperationPrice>
</Operations>
<TradeItemIdentification>
<GTIN>08711438159445</GTIN>
<AdditionalItemIdentification>
<TradeItemDescription>Vuren balk 60x150mm lengte 4200mm FSC70</TradeItemDescription>
<Colour>Vuren</Colour>
<PhysicalDimensions>
<MeasurementUnitCode>CMT</MeasurementUnitCode>
</PhysicalDimensions>
</AdditionalItemIdentification>
</TradeItemIdentification>
<TradeItemCertificate>
<CertificateClaimDescription>FSC Mix</CertificateClaimDescription>
</TradeItemCertificate>
<PriceInformation>
<Price>2.96</Price>
<PriceBase>
<NumberOfUnitsInPriceBasis>1</NumberOfUnitsInPriceBasis>
<MeasureUnitPriceBasis>MTR</MeasureUnitPriceBasis>
</PriceBase>
</PriceInformation>
</InvoiceLine>
</Invoice>
Upvotes: 2
Views: 1353
Reputation: 52888
The output of your XSLT is all in the default namespace http://www.gs1.nl/factuur/insbou/004
.
The input is not in a namespace.
When you do <xsl:copy-of select="."/>
in the template that matches NetLineAmount
, copy-of also copies the namespace. This results in the xmlns=""
being included in the output.
You can either remove xmlns="http://www.gs1.nl/factuur/insbou/004"
from your xsl:transform
(this will result in the output being in no namespace) or you can replace the copy-of with a literal NetLineAmount
element...
<xsl:template match="NetLineAmount">
<NetLineAmount>
<xsl:apply-templates select="@*|node()"/>
</NetLineAmount>
<VariableOrderConditions>
<VariableCode>LEN</VariableCode>
<NumericValue>2000</NumericValue>
<NumericValueUoM>MMT</NumericValueUoM>
</VariableOrderConditions>
<Operations>
<OperationCode>CLE</OperationCode>
<AlphanumericValue>Poetsen</AlphanumericValue>
<AdditionalInformation>met chroompoets</AdditionalInformation>
<OperationPrice>25</OperationPrice>
</Operations>
</xsl:template>
Upvotes: 3