cancel
Showing results for 
Search instead for 
Did you mean: 

CSV to XML with repetitive xml nodes

deepak_shaw
Contributor

Hi,
I’m trying to create a pipeline which suppose to create an xml file out of a CSV file.

CSV file looks like -
|ProductCode|ProductName|Price|Country|
|A001|DellLaptop|$400|US|
|A001|DellLaptop|$500|AU|
|A001|DellLaptop|$550|EU|

XML output should be -

<?xml version="1.0" encoding="UTF-8"?> US $400 AU $500 EU $550 [XML file attached as its not coming well in the question well..] Thanks for your answer, Deepak Shaw [Product.zip|attachment](upload://7NZiA8X09vabLf1eK3iLKeLDU5f.zip) (203 Bytes)
1 ACCEPTED SOLUTION

Just a small change in your Mapper needed:

image

That will output JSON like:

[{
	"Invoice": {
		"@xmlns:cac": "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
		"@xmlns:cbc": "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
		"@xmlns": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
		"cbc:CustomizationID": "urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:aunz:3.0",
		"cbc:ProfileID": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0",
		"cbc:ID": "PRP100418",
		"cbc:IssueDate": "29/04/2022",
		"cbc:DueDate": "6/05/2022",
		"cbc:InvoiceTypeCode": "380",
		"cbc:Note": "110535 - DAF - XRef607 ICT Services - CRM Developer",
		"cbc:DocumentCurrencyCode": "AUD",
		"InvoiceLines": [{
			"LineNumber": "1",
			"Tax": "700"
		}, {
			"LineNumber": "2",
			"Tax": "700"
		}],
		"ABNValue": "ABN 31 100 103 268"
	}
}]

which the XML Formatter will turn into:

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
   <cbc:CustomizationID>urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:aunz:3.0</cbc:CustomizationID>
   <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
   <cbc:ID>PRP100418</cbc:ID>
   <cbc:IssueDate>29/04/2022</cbc:IssueDate>
   <cbc:DueDate>6/05/2022</cbc:DueDate>
   <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
   <cbc:Note>110535 - DAF - XRef607 ICT Services - CRM Developer</cbc:Note>
   <cbc:DocumentCurrencyCode>AUD</cbc:DocumentCurrencyCode>
   <InvoiceLines>
      <LineNumber>1</LineNumber>
      <Tax>700</Tax>
   </InvoiceLines>
   <InvoiceLines>
      <LineNumber>2</LineNumber>
      <Tax>700</Tax>
   </InvoiceLines>
   <ABNValue>ABN 31 100 103 268</ABNValue>
</Invoice>

which is what I believe you wanted.

View solution in original post

19 REPLIES 19

I just want to be clear - you want to drop the values for ProduceCode and ProductName (e.g. A001 and DellLaptop respectively) from the eventual XML, correct? The only values you want to keep are Price and Country, yes?

Yes @robin , Thats correct

robin
Former Employee

I don’t believe your XML was attached correctly - please try again

marjan_karafilo
Contributor

Hi @deepak.shaw ,

I have attached a sample pipeline and sample CSV file that I am using for processing.
In the XML Generator snap, if you click the button Edit XML, you can see some logic in there.

Please have a look and let me know if it helps you.

Regards,
Marjan
csv sample.txt (112 Bytes)
CSV_TO_XML_2022_05_18.slp (6.7 KB)

Hi @marjan.karafiloski ,
Thanks for your reply.
The output is coming like:

<?xml version='1.0' encoding='UTF-8'?>
<DocumentRoot>
    <Document>
        <Metadata>
            <asMap>
                <global>
                    <doc_id>ae803607-d70c-11ec-9afc-6bf587c0d9c9</doc_id>
                </global>
            </asMap>
            <id>ae803607-d70c-11ec-9afc-6bf587c0d9c9</id>
        </Metadata>
        <Data>
            <xml>&lt;?xml version="1.0" encoding="UTF-8"?>&lt;Products>&lt;Product>&lt;ProductCode>A001&lt;/ProductCode>&lt;ProductName>DellLaptop&lt;/ProductName>&lt;Price>$400&lt;/Price>&lt;Country>US&lt;/Country>&lt;/Product>&lt;Product>&lt;ProductCode>A001&lt;/ProductCode>&lt;ProductName>DellLaptop&lt;/ProductName>&lt;Price>$500&lt;/Price>&lt;Country>AU&lt;/Country>&lt;/Product>&lt;Product>&lt;ProductCode>A001&lt;/ProductCode>&lt;ProductName>DellLaptop&lt;/ProductName>&lt;Price>$550&lt;/Price>&lt;Country>EU&lt;/Country>&lt;/Product>&lt;/Products></xml>
            <original>
                <products>
                    <ProductCode>A001</ProductCode>
                    <ProductName>DellLaptop</ProductName>
                    <Price>$400</Price>
                    <Country>US</Country>
                </products>
                <products>
                    <ProductCode>A001</ProductCode>
                    <ProductName>DellLaptop</ProductName>
                    <Price>$500</Price>
                    <Country>AU</Country>
                </products>
                <products>
                    <ProductCode>A001</ProductCode>
                    <ProductName>DellLaptop</ProductName>
                    <Price>$550</Price>
                    <Country>EU</Country>
                </products>
            </original>
        </Data>
    </Document>
</DocumentRoot>

With some additional tags, how to remove them?
One more thing How I can introduce namespaces in output xml with the approch you have suggested. Sample xml with output is like:

<?xml version="1.0" encoding="UTF-8"?>
<ProductCode xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
    xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
    xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
	<cbc:ProductName>
		<cac:CostLocation>
			<cbc:country>US</cbc:country>
			<cbc:Cost>$400</cbc:Cost>
		</cac:CostLocation>
		<cac:CostLocation>
			<cbc:country>AU</cbc:country>
			<cbc:Cost>$500</cbc:Cost>
		</cac:CostLocation>
		<cac:CostLocation>
			<cbc:country>EU</cbc:country>
			<cbc:Cost>$550</cbc:Cost>
		</cac:CostLocation>
	</cbc:ProductName>
</cbc:ProductCode>

Looking forward for your suggestions.
Regards,
Deepak Shaw