1/ Add needed fields into export. You can add also unnecessary fields, in different sequence, does not affect in this case.
3/ Set up FILTERS, for example only orders with invoice.
3/ Set up OPTIONS: we will need raw data for XLST transform (1), and in this example we will need output XML format file (2).
4/ Fill XLST transformation structure.
Here is basic XSLT structure for grouping Orders by Order ID:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="no" indent="yes" method="xml" version="1.0" encoding="UTF-8" /> <xsl:key use="order_id" match="/nvn_export_orders/order" name="groups"/> <xsl:template match="/"><xsl:apply-templates select="/nvn_export_orders" /></xsl:template> <xsl:template match="/nvn_export_orders"> <xsl:variable name="set" select="/nvn_export_orders/order" /> <xsl:variable name="count" select="count($set)" /> <!--TOTAL_ITEMS COUNTER--> <!-- FIRST ROW AND WRAPPER--> <ORDERS xmlns:od="http://www.w3.org/2001/XMLSchema-instance"> <TOTAL_ITEMS><xsl:value-of select="$count" /></TOTAL_ITEMS> <xsl:for-each select="order[generate-id(.)=generate-id(key('groups',order_id))]"><!--ORDER CYCLE--> <ORDER> <!--COMMON VALUES HERE--> <ORDER_NO><xsl:value-of select="order_id" /></ORDER_NO> <CUSTOMER_EMAIL><xsl:value-of select="email" /></CUSTOMER_EMAIL> <ITEMS> <xsl:for-each select="key('groups',order_id)"><!--ITEM CYCLE--> <!--ROWS ITEMS HERE--> <ITEM> <ROW><xsl:value-of select="position()"/></ROW> <PRODUCT_NAME><xsl:value-of select="product_name" /></PRODUCT_NAME> <QUANTITY><xsl:value-of select="product_quantity" /></QUANTITY> </ITEM> </xsl:for-each><!--ITEM CYCLE END--> </ITEMS> </ORDER> <ORDERCOUNT><xsl:value-of select="position()"/></ORDERCOUNT> </xsl:for-each><!--ORDER CYCLE END--> </ORDERS><!--WRAPPER END--> </xsl:template> </xsl:stylesheet>
Copy and paste this xlsx stylesheet into module “XML transformation – XSLT stylesheet” and save setting.
TIP: For better edit is recommended use external editor with syntax highlighting and save backup of xsl stylesheet
Explanatory notes:
Text between <!– –> is commentary and is not used for transformation.
Values insert using syntax <xsl:value-of select=”field_key” /> where “field_key” are keys from “List of XML tags”
For example <PRODUCT_NAME><xsl:value-of select=”product_name” /></PRODUCT_NAME>
Export and save XML file.
Sample output.
<?xml version="1.0" encoding="UTF-8"?> <ORDERS xmlns:od="http://www.w3.org/2001/XMLSchema-instance"> <TOTAL_ITEMS>3</TOTAL_ITEMS> <ORDER> <ORDER_NO>1</ORDER_NO> <CUSTOMER_EMAIL>test@rere.ts</CUSTOMER_EMAIL> <ITEMS> <ITEM> <ROW>1</ROW> <PRODUCT_NAME>Ontario - kamizelka pikowana</PRODUCT_NAME> <QUANTITY>1</QUANTITY> </ITEM> </ITEMS> </ORDER> <ORDERCOUNT>1</ORDERCOUNT> <ORDER> <ORDER_NO>2</ORDER_NO> <CUSTOMER_EMAIL>test@rere.ts</CUSTOMER_EMAIL> <ITEMS> <ITEM> <ROW>1</ROW> <PRODUCT_NAME>EMAMODA DRESS - BLUE 8711-3 - Size : S</PRODUCT_NAME> <QUANTITY>1</QUANTITY> </ITEM> <ITEM> <ROW>2</ROW> <PRODUCT_NAME>EMAMODA DRESS - Fuchsia 8711-2 - Size : S</PRODUCT_NAME> <QUANTITY>1</QUANTITY> </ITEM> </ITEMS> </ORDER> <ORDERCOUNT>2</ORDERCOUNT> </ORDERS>
Another sample xslt:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="no" indent="yes" method="xml" version="1.0" encoding="UTF-8" /> <xsl:key use="order_id" match="/nvn_export_orders/order" name="groups"/> <xsl:template match="/"><xsl:apply-templates select="/nvn_export_orders" /></xsl:template> <xsl:template match="/nvn_export_orders"> <xsl:variable name="set" select="/nvn_export_orders/order" /> <xsl:variable name="count" select="count($set)" /> <!--TOTAL_ITEMS COUNTER--> <!-- FIRST ROW AND WRAPPER--> <!-- <Customer_Name><xsl:value-of select="delivery_lastname"/><xsl:text> </xsl:text><xsl:value-of select="delivery_firstname"/></Customer_Name> --> <SalesOrders> <xsl:for-each select="order[generate-id(.)=generate-id(key('groups',order_id))]"><!--ORDER CYCLE--> <SalesOrder> <!--COMMON VALUES HERE--> <OrderDate><xsl:value-of select="date_add" /></OrderDate> <RequestedDeliveryDate><xsl:value-of select="delivery_date" /></RequestedDeliveryDate> <Document_No><xsl:value-of select="order_id" /></Document_No> <Customer_No>82011</Customer_No> <Customer_Name>John DOE</Customer_Name> <Customer_Address>16, Main street 2nd floor</Customer_Address> <Customer_Postcode>75002</Customer_Postcode> <Customer_City>Paris</Customer_City> <Customer_Countrycode>FR</Customer_Countrycode> <Customer_Contact>John DOE</Customer_Contact> <Customer_Email>pub@prestashop.com</Customer_Email> <Ship_To_Gender><xsl:value-of select="gender_name" /></Ship_To_Gender> <Ship_To_Firstname><xsl:value-of select="delivery_firstname"/></Ship_To_Firstname> <Ship_To_Lastname><xsl:value-of select="delivery_lastname"/></Ship_To_Lastname> <Ship_To_Address><xsl:value-of select="delivery_address1" /></Ship_To_Address> <!--Ship_To_Housenr><xsl:value-of select="delivery_address1"/></Ship_To_Housenr--> <Ship_To_Postcode><xsl:value-of select="delivery_postcode"/></Ship_To_Postcode> <Ship_To_City><xsl:value-of select="delivery_city"/></Ship_To_City> <Ship_To_Countrycode><xsl:value-of select="country_delivery_iso_code"/></Ship_To_Countrycode> <Ship_To_Email><xsl:value-of select="email" /></Ship_To_Email> <Ship_To_Phone><xsl:value-of select="delivery_phone"/></Ship_To_Phone> <xsl:for-each select="key('groups',order_id)"><!--ITEM CYCLE--> <!--ROWS ITEMS HERE--> <SalesLines> <Type>artikel</Type> <Line_No><xsl:value-of select="position()"/></Line_No> <ItemReference><xsl:value-of select="product_reference" /></ItemReference> <Barcode><xsl:value-of select="product_ean13" /></Barcode> <Quantity><xsl:value-of select="product_quantity" /></Quantity> <Dropshipping><xsl:value-of select="product_supplier_reference" /></Dropshipping> </SalesLines> </xsl:for-each><!--ITEM CYCLE END--> </SalesOrder> </xsl:for-each><!--ORDER CYCLE END--> </SalesOrders><!--WRAPPER END--> </xsl:template> </xsl:stylesheet>
and next sample XSLT:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="no" indent="yes" method="xml" version="1.0" encoding="UTF-8" /> <xsl:key use="order_id" match="/nvn_export_orders/order" name="groups"/> <xsl:template match="/"><xsl:apply-templates select="/nvn_export_orders" /></xsl:template> <xsl:template match="/nvn_export_orders"> <xsl:variable name="set" select="/nvn_export_orders/order" /> <xsl:variable name="count" select="count($set)" /> <!-- FIRST ROW AND WRAPPER--> <commandes xmlns:od="http://www.w3.org/2001/XMLSchema-instance"> <TOTAL_ITEMS><xsl:value-of select="$count" /></TOTAL_ITEMS> <xsl:for-each select="order[generate-id(.)=generate-id(key('groups',order_id))]"><!--ORDER CYCLE--> <CC_ENTETE_10> <!--COMMON VALUES HERE--> <DEPOSANT>XXX</DEPOSANT> <SHOP>YYY</SHOP> <SITE>0</SITE> <COMMANDE><xsl:value-of select="order_id" /></COMMANDE> <COMMANDE_CLIENT><xsl:value-of select="order_id" /></COMMANDE_CLIENT> <COMMANDE_N3><xsl:value-of select="order_reference" /></COMMANDE_N3> <TYPECDE>WEB</TYPECDE> <NBLIG_N3>2</NBLIG_N3> <TYPE_TRANS>100</TYPE_TRANS> <CODETRANS></CODETRANS> <NOMTRANS></NOMTRANS> <POIDS_CHOIX_TPT>0.6</POIDS_CHOIX_TPT> <HCREATN3_CDE><xsl:value-of select="date_add" /></HCREATN3_CDE> <CADEAU>0</CADEAU> <CADEAU_MSG></CADEAU_MSG> <ALERT_CLT>0</ALERT_CLT> <TOTAL_TTC>32.99</TOTAL_TTC> <MODE_PAIEMENT><xsl:value-of select="payment" /></MODE_PAIEMENT> <DPREVUE_CDE></DPREVUE_CDE> <BLOCAGE_INTERFACE></BLOCAGE_INTERFACE> <DDEBLOCAGE></DDEBLOCAGE> <BLOCAGE_COMMENT></BLOCAGE_COMMENT> <DLIV_CDE></DLIV_CDE> <INFOENTLIV1></INFOENTLIV1> <INFOENTLIV2></INFOENTLIV2> <INFOENTLIV3></INFOENTLIV3> <MODELIV></MODELIV> <INCOTERM></INCOTERM> <CODECLIENT_LIV><xsl:value-of select="id_address_delivery" /></CODECLIENT_LIV> <CODE_LANGUE_LIV>fr</CODE_LANGUE_LIV> <NOMCLIENT_LIV><xsl:value-of select="delivery_lastname" /></NOMCLIENT_LIV> <PRENOMCLIENT_LIV><xsl:value-of select="delivery_firstname" /></PRENOMCLIENT_LIV> <SOCIETECLIENT_LIV><xsl:value-of select="delivery_company" /></SOCIETECLIENT_LIV> <ADRESSE1_LIV><xsl:value-of select="delivery_address1" /></ADRESSE1_LIV> <ADRESSE2_LIV><xsl:value-of select="delivery_address2" /></ADRESSE2_LIV> <ADRESSE3_LIV></ADRESSE3_LIV> <AUTRES_INFO_LIV></AUTRES_INFO_LIV> <CODEPOSTAL_LIV><xsl:value-of select="delivery_postcode" /></CODEPOSTAL_LIV> <VILLE_LIV><xsl:value-of select="delivery_city" /></VILLE_LIV> <CODEPAYS_LIV><xsl:value-of select="country_delivery_iso_code" /></CODEPAYS_LIV> <PAYS_LIV><xsl:value-of select="delivery_country" /></PAYS_LIV> <CONTACT_LIV></CONTACT_LIV> <TEL_LIV><xsl:value-of select="delivery_phone" /></TEL_LIV> <FAX_LIV></FAX_LIV> <MOBILE_LIV><xsl:value-of select="delivery_mobilephone" /></MOBILE_LIV> <EMAIL_LIV><xsl:value-of select="email" /></EMAIL_LIV> <CODE_PT_RELAIS>12005</CODE_PT_RELAIS> <CODE_RESEAU_RELAIS>R12</CODE_RESEAU_RELAIS> <CODECLIENT_FACT><xsl:value-of select="id_address_invoice" /></CODECLIENT_FACT> <CODE_LANGUE_FACT>fr</CODE_LANGUE_FACT> <NOMCLIENT_FACT><xsl:value-of select="invoice_lastname" /></NOMCLIENT_FACT> <PRENOMCLIENT_FACT><xsl:value-of select="invoice_firstname" /></PRENOMCLIENT_FACT> <SOCIETECLIENT_FACT><xsl:value-of select="invoice_company" /></SOCIETECLIENT_FACT> <ADRESSE1_FACT><xsl:value-of select="invoice_address1" /></ADRESSE1_FACT> <ADRESSE2_FACT><xsl:value-of select="invoice_address2" /></ADRESSE2_FACT> <ADRESSE3_FACT></ADRESSE3_FACT> <AUTRES_INFO_FACT></AUTRES_INFO_FACT> <CODEPOSTAL_FACT><xsl:value-of select="invoice_postcode" /></CODEPOSTAL_FACT> <VILLE_FACT><xsl:value-of select="invoice_city" /></VILLE_FACT> <CODEPAYS_FACT><xsl:value-of select="country_invoice_iso_code" /></CODEPAYS_FACT> <PAYS_FACT><xsl:value-of select="invoice_country" /></PAYS_FACT> <CONTACT_FACT></CONTACT_FACT> <TEL_FACT><xsl:value-of select="invoice_phone" /></TEL_FACT> <FAX_FACT></FAX_FACT> <MOBILE_FACT><xsl:value-of select="invoice_mobilephone" /></MOBILE_FACT> <EMAIL_FACT><xsl:value-of select="email" /></EMAIL_FACT> <COMMENTBP></COMMENTBP> <COMMENTBL></COMMENTBL> <COMMENTBE></COMMENTBE> <REDUC_CODE></REDUC_CODE> <REDUC_TYPE></REDUC_TYPE> <REDUC_VAL></REDUC_VAL> <REDUC_MSG></REDUC_MSG> <REDUC_FV></REDUC_FV> <REF_ASILAGE></REF_ASILAGE> <QTE_ASILAGE></QTE_ASILAGE> <xsl:for-each select="key('groups',order_id)"><!--ITEM CYCLE--> <!--ROWS ITEMS HERE--> <CC_LIGNE_10> <DEPOSANT>XXX</DEPOSANT> <SHOP>YYY</SHOP> <SITE>0</SITE> <ROW><xsl:value-of select="position()"/></ROW> <COMMANDE><xsl:value-of select="order_id" /></COMMANDE> <LIG_CDE>1</LIG_CDE> <REFERENCE><xsl:value-of select="product_reference" /></REFERENCE> <DESIGNATION_LIG><xsl:value-of select="product_name" /></DESIGNATION_LIG> <QTECDEE_LIGCDE>1</QTECDEE_LIGCDE> <STOCK></STOCK> <PUHT_VENTE>250.2</PUHT_VENTE> <DEVISE>EUR</DEVISE> <INFOLIGLIV1></INFOLIGLIV1> <INFOLIGLIV2></INFOLIGLIV2> <INFOLIGLIV3></INFOLIGLIV3> <CODE_TVA>0</CODE_TVA> </CC_LIGNE_10> </xsl:for-each><!--ITEM CYCLE END--> </CC_ENTETE_10> <ORDERCOUNT><xsl:value-of select="position()"/></ORDERCOUNT> </xsl:for-each><!--ORDER CYCLE END--> </commandes><!--WRAPPER END--> </xsl:template> </xsl:stylesheet>
For more samples visit this page: http://www.praotec.com/nvn-export-orders-page-of-xslt-samples/