LDH
LDH

Reputation: 25

How to remove xmlns="" in an element?

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

Answers (1)

Daniel Haley
Daniel Haley

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

Related Questions