Miva - Data Migrations Using Remote Provisioning
Using JavaScript's nested-object structure (or any other language native data structure) we can replicate the same XML tags, attributes, and DOM structue that is needed for XML provisioning.
Using the JavaScript object (or any other language native data structure) helps keep us thinking in more of the Model sense in MVC. It also helps make the migration-data easier to add, update, iterate over, modify, etc.
{"Provision":{"Store":{"_code":"my-store-code","Product_Add":[{"Code":"alpinestars-oscar-ray-jacket","Name":"Alpinestars - Oscar Ray Jacket","Active":1,"Price":"299.95","Cost":"299.95","ThumbnailImage":"graphics/00000001/28203466.jpg","FullSizeImage":"graphics/00000001/28203466.jpg","CanonicalCategoryCode":"A","Weight":10},{"Code":"icon-motorhead-2-jacket","Name":"Icon - Motorhead 2 Jacket","Active":1,"Price":"380","Cost":"380","ThumbnailImage":"graphics/00000001/icon-motorhead-2-jacket-white.jpg","FullSizeImage":"graphics/00000001/icon-motorhead-2-jacket-white.jpg","CanonicalCategoryCode":"i","Weight":10},{"Code":"hmk-action-2-jacket","Name":"HMK - Action 2 Jacket","Active":1,"Price":"287.96","Cost":"319.95","ThumbnailImage":"graphics/00000001/hmk-action-2-jacket-black.jpg","FullSizeImage":"graphics/00000001/hmk-action-2-jacket-black.jpg","CanonicalCategoryCode":"H","Weight":10},{"Code":"hmk-womens-action-2-jacket","Name":"HMK - Women's Action 2 Jacket","Active":1,"Price":"287.96","Cost":"319.95","ThumbnailImage":"graphics/00000001/hmk-womens-action-2-jacket-blue.jpg","FullSizeImage":"graphics/00000001/hmk-womens-action-2-jacket-blue.jpg","CanonicalCategoryCode":"H","Weight":10},{"Code":"fly-racing-butane-4-jacket","Name":"Fly Racing - Butane 4 Jacket","Active":1,"Price":"152.96","Cost":"169.95","ThumbnailImage":"graphics/00000001/Black-Black.jpg","FullSizeImage":"graphics/00000001/Black-Black.jpg","CanonicalCategoryCode":"J","Weight":10},{"Code":"joe-rocket-classic-92-jacket","Name":"Joe Rocket - Classic 92 Jacket","Active":1,"Price":"287.99","Cost":"319.99","ThumbnailImage":"graphics/00000001/joe-rocket-classic-jacket-black.jpg","FullSizeImage":"graphics/00000001/joe-rocket-classic-jacket-black.jpg","CanonicalCategoryCode":"S","Weight":10},{"Code":"tour-master-transition-jacket","Name":"Tour Master - Transition Series 4 Jacket","Active":1,"Price":"269.99","Cost":"269.99","ThumbnailImage":"graphics/00000001/tour-master-transition-4-jacket-lightgrey.jpg","FullSizeImage":"graphics/00000001/tour-master-transition-4-jacket-lightgrey.jpg","CanonicalCategoryCode":"S","Weight":10},{"Code":"SPIDI-NET-7-JACKET","Name":"Spidi - Net 7 Jacket","Active":1,"Price":"289.95","Cost":"289.95","ThumbnailImage":"graphics/00000001/SPIDINET7JKT.jpg","FullSizeImage":"graphics/00000001/SPIDINET7JKT.jpg","CanonicalCategoryCode":"s","Weight":10},{"Code":"SPIDI-ERGO-05-JACKET","Name":"SPIDI - Ergo 05 Jacket","Active":1,"Price":"599.95","Cost":"599.95","ThumbnailImage":"graphics/00000001/SPIDI-ERGO-05-JACKET.jpg","FullSizeImage":"graphics/00000001/SPIDI-ERGO-05-JACKET.jpg","CanonicalCategoryCode":"s","Weight":10},{"Code":"alpinestars-shelly-leather-jacket","Name":"Alpinestars - Shelly Leather Jacket","Active":1,"Price":"569.95","Cost":"569.95","ThumbnailImage":"graphics/00000001/28130589.jpg","FullSizeImage":"graphics/00000001/28130589.jpg","CanonicalCategoryCode":"A","Weight":10}],"CategoryProduct_Assign":[{"_category_code":"Street","_product_code":"alpinestars-oscar-ray-jacket"},{"_category_code":"Street/Street Brands","_product_code":"alpinestars-oscar-ray-jacket"},{"_category_code":"Street/Street Brands/Alpinestars","_product_code":"alpinestars-oscar-ray-jacket"},{"_category_code":"Street/Street Brands/Alpinestars/Jackets","_product_code":"alpinestars-oscar-ray-jacket"},{"_category_code":"Street","_product_code":"icon-motorhead-2-jacket"},{"_category_code":"Street/Men's Riding Gear","_product_code":"icon-motorhead-2-jacket"},{"_category_code":"Street/Men's Riding Gear/Jackets","_product_code":"icon-motorhead-2-jacket"},{"_category_code":"Street/Men's Riding Gear/Jackets/Icon Jacket","_product_code":"icon-motorhead-2-jacket"},{"_category_code":"Street","_product_code":"icon-motorhead-2-jacket"},{"_category_code":"Street/Street Brands","_product_code":"icon-motorhead-2-jacket"},{"_category_code":"Street/Street Brands/Icon","_product_code":"icon-motorhead-2-jacket"},{"_category_code":"Street/Street Brands/Icon/Jackets","_product_code":"icon-motorhead-2-jacket"},{"_category_code":"Dirt Bike","_product_code":"hmk-action-2-jacket"},{"_category_code":"Dirt Bike/Dirt Brands","_product_code":"hmk-action-2-jacket"},{"_category_code":"Dirt Bike/Dirt Brands/HMK","_product_code":"hmk-action-2-jacket"},{"_category_code":"Dirt Bike/Dirt Brands/HMK/HMK Jackets","_product_code":"hmk-action-2-jacket"},{"_category_code":"Snow","_product_code":"hmk-action-2-jacket"},{"_category_code":"Snow/Men's Snow Gear","_product_code":"hmk-action-2-jacket"},{"_category_code":"Snow/Men's Snow Gear/Jackets","_product_code":"hmk-action-2-jacket"},{"_category_code":"Snow/Men's Snow Gear/Jackets/HMK Jackets","_product_code":"hmk-action-2-jacket"},{"_category_code":"Dirt Bike","_product_code":"hmk-womens-action-2-jacket"},{"_category_code":"Dirt Bike/Dirt Brands","_product_code":"hmk-womens-action-2-jacket"},{"_category_code":"Dirt Bike/Dirt Brands/HMK","_product_code":"hmk-womens-action-2-jacket"},{"_category_code":"Dirt Bike/Dirt Brands/HMK/HMK Jackets","_product_code":"hmk-womens-action-2-jacket"},{"_category_code":"Snow","_product_code":"hmk-womens-action-2-jacket"},{"_category_code":"Snow/Women's Snow Gear","_product_code":"hmk-womens-action-2-jacket"},{"_category_code":"Snow/Women's Snow Gear/Jackets","_product_code":"hmk-womens-action-2-jacket"},{"_category_code":"Snow/Women's Snow Gear/Jackets/HMK Jackets","_product_code":"hmk-womens-action-2-jacket"},{"_category_code":"Street","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street/Clearance | Sale","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street/Clearance | Sale/Closeout Motorcycle Jackets","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street/Street Brands","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street/Street Brands/Fly Racing","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street/Street Brands/Fly Racing/Jackets","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street/Men's Riding Gear","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street/Men's Riding Gear/Jackets","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street/Men's Riding Gear/Jackets/Fly Jackets","_product_code":"fly-racing-butane-4-jacket"},{"_category_code":"Street","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street/Men's Riding Gear","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street/Men's Riding Gear/Jackets","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street/Men's Riding Gear/Jackets/Joe Rocket Jackets","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street/Street Brands","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street/Street Brands/Joe Rocket","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street/Street Brands/Joe Rocket/Jackets","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street/Clearance | Sale","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street/Clearance | Sale/Closeout Motorcycle Jackets","_product_code":"joe-rocket-classic-92-jacket"},{"_category_code":"Street","_product_code":"tour-master-transition-jacket"},{"_category_code":"Street/Men's Riding Gear","_product_code":"tour-master-transition-jacket"},{"_category_code":"Street/Men's Riding Gear/Jackets","_product_code":"tour-master-transition-jacket"},{"_category_code":"Street/Men's Riding Gear/Jackets/Tour Master Jackets","_product_code":"tour-master-transition-jacket"},{"_category_code":"Street","_product_code":"tour-master-transition-jacket"},{"_category_code":"Street/Street Brands","_product_code":"tour-master-transition-jacket"},{"_category_code":"Street/Street Brands/Tour Master","_product_code":"tour-master-transition-jacket"},{"_category_code":"Street/Street Brands/Tour Master/Jackets","_product_code":"tour-master-transition-jacket"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Men's Riding Gear","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Men's Riding Gear","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Men's Riding Gear/Jackets","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Street Brands","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Men's Riding Gear","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Men's Riding Gear/Jackets","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Men's Riding Gear/Jackets/SPIDI Jackets","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Street Brands","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Street Brands/SPIDI","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Street Brands","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Street Brands/SPIDI","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street/Street Brands/SPIDI/Jackets","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-NET-7-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Men's Riding Gear","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Men's Riding Gear","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Men's Riding Gear/Jackets","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Street Brands","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Men's Riding Gear","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Men's Riding Gear/Jackets","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Men's Riding Gear/Jackets/SPIDI Jackets","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Street Brands","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Street Brands/SPIDI","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Street Brands","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Street Brands/SPIDI","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street/Street Brands/SPIDI/Jackets","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"SPIDI-ERGO-05-JACKET"},{"_category_code":"Street","_product_code":"alpinestars-shelly-leather-jacket"},{"_category_code":"Street/Street Brands","_product_code":"alpinestars-shelly-leather-jacket"},{"_category_code":"Street/Street Brands/Alpinestars","_product_code":"alpinestars-shelly-leather-jacket"},{"_category_code":"Street/Street Brands/Alpinestars/Jackets","_product_code":"alpinestars-shelly-leather-jacket"},{"_category_code":"Street","_product_code":"alpinestars-shelly-leather-jacket"},{"_category_code":"Street/Women's Riding Gear","_product_code":"alpinestars-shelly-leather-jacket"},{"_category_code":"Street/Women's Riding Gear/Jackets","_product_code":"alpinestars-shelly-leather-jacket"},{"_category_code":"Street/Women's Riding Gear/Jackets/Leather","_product_code":"alpinestars-shelly-leather-jacket"}]}}}
After the JavaScript object is created, we can use an Object-to-XML conversion function, like this one: https://github.com/abdmob/x2js
<Provision><Store code="my-store-code"><Product_Add><Code>alpinestars-oscar-ray-jacket</Code><Name>Alpinestars - Oscar Ray Jacket</Name><Active>1</Active><Price>299.95</Price><Cost>299.95</Cost><ThumbnailImage>graphics/00000001/28203466.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/28203466.jpg</FullSizeImage><CanonicalCategoryCode>A</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>icon-motorhead-2-jacket</Code><Name>Icon - Motorhead 2 Jacket</Name><Active>1</Active><Price>380</Price><Cost>380</Cost><ThumbnailImage>graphics/00000001/icon-motorhead-2-jacket-white.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/icon-motorhead-2-jacket-white.jpg</FullSizeImage><CanonicalCategoryCode>i</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>hmk-action-2-jacket</Code><Name>HMK - Action 2 Jacket</Name><Active>1</Active><Price>287.96</Price><Cost>319.95</Cost><ThumbnailImage>graphics/00000001/hmk-action-2-jacket-black.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/hmk-action-2-jacket-black.jpg</FullSizeImage><CanonicalCategoryCode>H</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>hmk-womens-action-2-jacket</Code><Name>HMK - Women's Action 2 Jacket</Name><Active>1</Active><Price>287.96</Price><Cost>319.95</Cost><ThumbnailImage>graphics/00000001/hmk-womens-action-2-jacket-blue.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/hmk-womens-action-2-jacket-blue.jpg</FullSizeImage><CanonicalCategoryCode>H</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>fly-racing-butane-4-jacket</Code><Name>Fly Racing - Butane 4 Jacket</Name><Active>1</Active><Price>152.96</Price><Cost>169.95</Cost><ThumbnailImage>graphics/00000001/Black-Black.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/Black-Black.jpg</FullSizeImage><CanonicalCategoryCode>J</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>joe-rocket-classic-92-jacket</Code><Name>Joe Rocket - Classic 92 Jacket</Name><Active>1</Active><Price>287.99</Price><Cost>319.99</Cost><ThumbnailImage>graphics/00000001/joe-rocket-classic-jacket-black.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/joe-rocket-classic-jacket-black.jpg</FullSizeImage><CanonicalCategoryCode>S</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>tour-master-transition-jacket</Code><Name>Tour Master - Transition Series 4 Jacket</Name><Active>1</Active><Price>269.99</Price><Cost>269.99</Cost><ThumbnailImage>graphics/00000001/tour-master-transition-4-jacket-lightgrey.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/tour-master-transition-4-jacket-lightgrey.jpg</FullSizeImage><CanonicalCategoryCode>S</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>SPIDI-NET-7-JACKET</Code><Name>Spidi - Net 7 Jacket</Name><Active>1</Active><Price>289.95</Price><Cost>289.95</Cost><ThumbnailImage>graphics/00000001/SPIDINET7JKT.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/SPIDINET7JKT.jpg</FullSizeImage><CanonicalCategoryCode>s</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>SPIDI-ERGO-05-JACKET</Code><Name>SPIDI - Ergo 05 Jacket</Name><Active>1</Active><Price>599.95</Price><Cost>599.95</Cost><ThumbnailImage>graphics/00000001/SPIDI-ERGO-05-JACKET.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/SPIDI-ERGO-05-JACKET.jpg</FullSizeImage><CanonicalCategoryCode>s</CanonicalCategoryCode><Weight>10</Weight></Product_Add><Product_Add><Code>alpinestars-shelly-leather-jacket</Code><Name>Alpinestars - Shelly Leather Jacket</Name><Active>1</Active><Price>569.95</Price><Cost>569.95</Cost><ThumbnailImage>graphics/00000001/28130589.jpg</ThumbnailImage><FullSizeImage>graphics/00000001/28130589.jpg</FullSizeImage><CanonicalCategoryCode>A</CanonicalCategoryCode><Weight>10</Weight></Product_Add><CategoryProduct_Assign category_code="Street" product_code="alpinestars-oscar-ray-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="alpinestars-oscar-ray-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Alpinestars" product_code="alpinestars-oscar-ray-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Alpinestars/Jackets" product_code="alpinestars-oscar-ray-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="icon-motorhead-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="icon-motorhead-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets" product_code="icon-motorhead-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets/Icon Jacket" product_code="icon-motorhead-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="icon-motorhead-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="icon-motorhead-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Icon" product_code="icon-motorhead-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Icon/Jackets" product_code="icon-motorhead-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Dirt Bike" product_code="hmk-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Dirt Bike/Dirt Brands" product_code="hmk-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Dirt Bike/Dirt Brands/HMK" product_code="hmk-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Dirt Bike/Dirt Brands/HMK/HMK Jackets" product_code="hmk-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Snow" product_code="hmk-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Snow/Men's Snow Gear" product_code="hmk-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Snow/Men's Snow Gear/Jackets" product_code="hmk-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Snow/Men's Snow Gear/Jackets/HMK Jackets" product_code="hmk-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Dirt Bike" product_code="hmk-womens-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Dirt Bike/Dirt Brands" product_code="hmk-womens-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Dirt Bike/Dirt Brands/HMK" product_code="hmk-womens-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Dirt Bike/Dirt Brands/HMK/HMK Jackets" product_code="hmk-womens-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Snow" product_code="hmk-womens-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Snow/Women's Snow Gear" product_code="hmk-womens-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Snow/Women's Snow Gear/Jackets" product_code="hmk-womens-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Snow/Women's Snow Gear/Jackets/HMK Jackets" product_code="hmk-womens-action-2-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Clearance | Sale" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Clearance | Sale/Closeout Motorcycle Jackets" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Fly Racing" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Fly Racing/Jackets" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets/Fly Jackets" product_code="fly-racing-butane-4-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets/Joe Rocket Jackets" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Joe Rocket" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Joe Rocket/Jackets" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Clearance | Sale" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Clearance | Sale/Closeout Motorcycle Jackets" product_code="joe-rocket-classic-92-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="tour-master-transition-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="tour-master-transition-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets" product_code="tour-master-transition-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets/Tour Master Jackets" product_code="tour-master-transition-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="tour-master-transition-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="tour-master-transition-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Tour Master" product_code="tour-master-transition-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Tour Master/Jackets" product_code="tour-master-transition-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets/SPIDI Jackets" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/SPIDI" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/SPIDI" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/SPIDI/Jackets" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-NET-7-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Men's Riding Gear/Jackets/SPIDI Jackets" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/SPIDI" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/SPIDI" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/SPIDI/Jackets" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="SPIDI-ERGO-05-JACKET"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="alpinestars-shelly-leather-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands" product_code="alpinestars-shelly-leather-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Alpinestars" product_code="alpinestars-shelly-leather-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Street Brands/Alpinestars/Jackets" product_code="alpinestars-shelly-leather-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street" product_code="alpinestars-shelly-leather-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Women's Riding Gear" product_code="alpinestars-shelly-leather-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Women's Riding Gear/Jackets" product_code="alpinestars-shelly-leather-jacket"></CategoryProduct_Assign><CategoryProduct_Assign category_code="Street/Women's Riding Gear/Jackets/Leather" product_code="alpinestars-shelly-leather-jacket"></CategoryProduct_Assign></Store></Provision>
$(function(){
// Initial demo configuration
demo = {};
demo.migration_object = {
Provision: {
Store: {
_code: 'my-store-code',
}
}
};
// Start the Demo app's process
// Get the data, then pass it to the data-parser
demo.run = function(){
$.getJSON('//api.searchspring.net/api/search/search.json?callback=?', {
q: 'jackets',
method: 'search',
format: 'json',
resultsFormat: 'native',
resultsPerPage: '10',
websiteKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}, demo.parseData);
};
// Use the data and map it from the current structure
// to the structure needed for XML provisioning
demo.parseData = function(json) {
var products = json.results;
demo.migration_object.Provision.Store.Product_Add = [];
demo.migration_object.Provision.Store.CategoryProduct_Assign = [];
products.forEach(function(product){
demo.migration_object.Provision.Store.Product_Add.push({
Code: product.sku,
Name: product.name,
Active: 1,
Price: product.price,
Cost: product.msrp,
ThumbnailImage: product.thumbnail,
FullSizeImage: product.image,
CanonicalCategoryCode: product.catcode[0],
Weight: 10
});
product.facet_hierarchy.forEach(function(category){
demo.migration_object.Provision.Store.CategoryProduct_Assign.push({
_category_code: category,
_product_code: product.sku
});
});
});
demo.doProvision();
};
// The data is ready, now lets:
// - Convert it to XML
// - Send it to the Remote Provisioing module
demo.doProvision = function(){
// Convert the existing data structure
// from a JavaScript Object to an XML string
var x2js = new X2JS({ useDoubleQuotes: true });
demo.migration_xml = x2js.json2xml_str( demo.migration_object );
// Psuedo Post to Remote Provisioning Module
/*
$.post('/mm5/json.mvc', {xml: demo.migration_xml});
*/
// The main migration function is done.
// Let's just output some helpful source-data
// to help our understanding of what happened
demo.outputResult();
};
demo.outputResult = function(){
$('#json').text( JSON.stringify( demo.migration_object ) );
$('#xml').text( demo.migration_xml );
$('#javascript-demo-source code').text( $.trim($('#input-source').html()) );
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
};
demo.run();
});
Using JavaScript's nested-object structure (or any other language native data structure) we can replicate the same XML tags, attributes, and DOM structue that is needed for XML provisioning.
Using the JavaScript object (or any other language native data structure) helps keep us thinking in more of the Model sense in MVC. It also helps make the migration-data easier to add, update, iterate over, modify, etc.
var data = {
Provision: {
Store: {
_code: 'my-store-code',
}
}
}
After the JavaScript object is created, we can use an Object-to-XML conversion function, like this one: https://github.com/abdmob/x2js
<Provision>
<Store code="my-store-code">
</Store>
</Provision>