I want to copy XML from specific node and add additional prefix for rest of the nodes. I cannot remove the parent node. Please help:
Here is my XML:
<?xml version="1.0" encoding="UTF-8"?>
<EdiSupplierInvoiceImportEnvelope>
<Image />
<Attachments />
<InvoiceData>
<EdiSupplierInvoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InvoiceType>ORDERS_BASED</InvoiceType>
<CompanyIdentifiers>
<EdiCompanyIdentifier>
<IdentifierType>OTHER</IdentifierType>
<IdentifierValue>BDT</IdentifierValue>
</EdiCompanyIdentifier>
</CompanyIdentifiers>
<InvoiceNumber>123</InvoiceNumber>
<InvoiceDate>2019-04-09</InvoiceDate>
<CurrencyCode>DKK</CurrencyCode>
<CurrencyRate>1</CurrencyRate>
<Gross>5776.15</Gross>
<Net>4620.92</Net>
<Tax>1155.23</Tax>
<Rounding>0</Rounding>
<OrderIdentifier>PO0066197</OrderIdentifier>
<SupplierIdentifiers>
<EdiSupplierIdentifier>
<IdentifierType>EAN_NUMBER</IdentifierType>
<IdentifierValue>EXT_14020136</IdentifierValue>
</EdiSupplierIdentifier>
</SupplierIdentifiers>
<Lines>
<EdiSupplierInvoiceLine>
<ItemNumber>273330</ItemNumber>
<ItemDescription>
</ItemDescription>
<Amount>3670.92</Amount>
<Quantity>11</Quantity>
<UnitPrice>333.72</UnitPrice>
<Unit>Krt</Unit>
</EdiSupplierInvoiceLine>
<EdiSupplierInvoiceLine>
<ItemNumber>111563</ItemNumber>
<ItemDescription>
</ItemDescription>
<Amount>950.00</Amount>
<Quantity>10</Quantity>
<UnitPrice>95.00</UnitPrice>
<Unit>krt</Unit>
</EdiSupplierInvoiceLine>
<EdiSupplierInvoiceLine>
<ItemNumber>113454</ItemNumber>
<ItemDescription>
</ItemDescription>
<Amount>0.00</Amount>
<Quantity>0</Quantity>
<UnitPrice>244.20</UnitPrice>
<Unit>krt</Unit>
</EdiSupplierInvoiceLine>
</Lines>
<CodingLines>
<EdiCodingLine>
<LineNumber>1</LineNumber>
<Dimensions />
</EdiCodingLine>
<EdiCodingLine>
<LineNumber>2</LineNumber>
<Dimensions />
</EdiCodingLine>
<EdiCodingLine>
<LineNumber>3</LineNumber>
<Dimensions />
</EdiCodingLine>
</CodingLines>
<PaymentDetails xsi:nil="true" />
<CustomField_Numeric1 xsi:nil="true" />
<CustomField_Numeric2 xsi:nil="true" />
<CustomField_Numeric3 xsi:nil="true" />
<CustomField_Numeric4 xsi:nil="true" />
<CustomField_Numeric5 xsi:nil="true" />
<CustomField_Text1 xsi:nil="true" />
<CustomField_Text2 xsi:nil="true" />
<CustomField_Text3 xsi:nil="true" />
<CustomField_Text4 xsi:nil="true" />
<CustomField_Text5 xsi:nil="true" />
<DocumentSource>ManualCreation</DocumentSource>
<CaptureUser xsi:nil="true" />
</EdiSupplierInvoice>
</InvoiceData>
</EdiSupplierInvoiceImportEnvelope>
Here is XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://schemas.datacontract.org/2004/07/Medius.PurchaseToPay.Integrations.DocumentImport">
<xsl:output indent="yes" />
<xsl:template match="*" >
<xsl:element name="di:{name()}" namespace="http://schemas.datacontract.org/2004/07/Medius.PurchaseToPay.Integrations.DocumentImport">
<xsl:copy-of select="namespace::EdiSupplierInvoice" />
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="EdiSupplierInvoiceImportEnvelope/InvoiceData">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Expected results:
<di:EdiSupplierInvoice xmlns:di="http://schemas.datacontract.org/2004/07/Medius.PurchaseToPay.Integrations.DocumentImport">
<di:InvoiceType>ORDERS_BASED</di:InvoiceType>
<di:CompanyIdentifiers>
<di:EdiCompanyIdentifier>
<di:IdentifierType>OTHER</di:IdentifierType>
<di:IdentifierValue>BDT</di:IdentifierValue>
</di:EdiCompanyIdentifier>
</di:CompanyIdentifiers>
<di:InvoiceNumber>123</di:InvoiceNumber>
<di:InvoiceDate>2019-04-09</di:InvoiceDate>
<di:CurrencyCode>DKK</di:CurrencyCode>
<di:CurrencyRate>1</di:CurrencyRate>
<di:Gross>5776.15</di:Gross>
<di:Net>4620.92</di:Net>
<di:Tax>1155.23</di:Tax>
<di:Rounding>0</di:Rounding>
<di:OrderIdentifier>PO0066197</di:OrderIdentifier>
<di:SupplierIdentifiers>
<di:EdiSupplierIdentifier>
<di:IdentifierType>EAN_NUMBER</di:IdentifierType>
<di:IdentifierValue>EXT_14020136</di:IdentifierValue>
</di:EdiSupplierIdentifier>
</di:SupplierIdentifiers>
<di:Lines>
<di:EdiSupplierInvoiceLine>
<di:ItemNumber>273330</di:ItemNumber>
<di:ItemDescription>
</di:ItemDescription>
<di:Amount>3670.92</di:Amount>
<di:Quantity>11</di:Quantity>
<di:UnitPrice>333.72</di:UnitPrice>
<di:Unit>Krt</di:Unit>
</di:EdiSupplierInvoiceLine>
<di:EdiSupplierInvoiceLine>
<di:ItemNumber>111563</di:ItemNumber>
<di:ItemDescription>
</di:ItemDescription>
<di:Amount>950.00</di:Amount>
<di:Quantity>10</di:Quantity>
<di:UnitPrice>95.00</di:UnitPrice>
<di:Unit>krt</di:Unit>
</di:EdiSupplierInvoiceLine>
<di:EdiSupplierInvoiceLine>
<di:ItemNumber>113454</di:ItemNumber>
<di:ItemDescription>
</di:ItemDescription>
<di:Amount>0.00</di:Amount>
<di:Quantity>0</di:Quantity>
<di:UnitPrice>244.20</di:UnitPrice>
<di:Unit>krt</di:Unit>
</di:EdiSupplierInvoiceLine>
</di:Lines>
<di:CodingLines>
<di:EdiCodingLine>
<di:LineNumber>1</di:LineNumber>
<di:Dimensions />
</di:EdiCodingLine>
<di:EdiCodingLine>
<di:LineNumber>2</di:LineNumber>
<di:Dimensions />
</di:EdiCodingLine>
<di:EdiCodingLine>
<di:LineNumber>3</di:LineNumber>
<di:Dimensions />
</di:EdiCodingLine>
</di:CodingLines>
<di:PaymentDetails />
<di:CustomField_Numeric1 />
<di:CustomField_Numeric2 />
<di:CustomField_Numeric3 />
<di:CustomField_Numeric4 />
<di:CustomField_Numeric5 />
<di:CustomField_Text1 />
<di:CustomField_Text2 />
<di:CustomField_Text3 />
<di:CustomField_Text4 />
<di:CustomField_Text5 />
<di:DocumentSource>ManualCreation</di:DocumentSource>
<di:CaptureUser />
</di:EdiSupplierInvoice>
The second template does not match EdiSupplierInvoiceImportEnvelope/InvoiceData child nodes. It always gives me results with all nodes, not as I wanted.
Your first template will be used to match the root
EdiSupplierInvoiceImportEnvelopeand all its children, and so these will all be copied.If you want to skip over the parent nodes, and start copying at
EdiSupplierInvoice, change the second template to this...