Good Afternoon,
I have a function that builds a string for a template in my DB that outputs an XML structure. It takes in a Order class as a parameter and a Template, well I am having troubles trying to populate a placeholder tag named [[items]], where based on the number of items in the table it should build the xml list for that portion.
This is the Template, It is only returning one instance of the string but it should return (n) instances based on what's in the table.
<Items>
[[items]]
</Items>
This is what should be populated for the other tags for the item
<Item>
<SKU>[[item_sku]]</SKU>
<PROD_NAME><![CDATA[[[item_product_name]]]]></PROD_NAME>
<Description><![CDATA[[[item_name]]]]></Description>
<Attributes><![CDATA[[[item_attributes]]]]></Attributes>
<Quantity>[[item_qty]]</Quantity>
<UnitPrice>[[item_price]]</UnitPrice>
<InkColor>[[item_inkcolor]]</InkColor>
</Item>
And It want to populate like this
<Items>
<Item>
<SKU>7Z-BRPA-K79A</SKU>
<PROD_NAME><![CDATA[Test One]]></PROD_NAME>
<Description><![CDATA[ExcelMark 5-Line Large Return Address Stamp - Custom Self Inking Rubber Stamp]]></Description>
<Attributes><![CDATA[Custom Text Line 1 Text: This book was donated to CAEO Font: Arial
Custom Text Line 2 Text: In tribute to & memory of Font: Arial]]></Attributes>
<Quantity>1</Quantity>
<UnitPrice><![CDATA[$9.99]]></UnitPrice>
<InkColor>Red</InkColor>
</Item>
<Item>
<SKU>42A1848</SKU>
<PROD_NAME><![CDATA[Test Two]]></PROD_NAME>
<Description><![CDATA[Self Inking Rubber Stamp with up To 4 Lines of Custom Text]]></Description>
<Attributes><![CDATA[Custom Text Line 1 Text: This book was donated to CAEO Font: Arial
Custom Text Line 2 Text: In tribute to & memory of Font: Arial]]></Attributes>
<Quantity>1</Quantity>
<UnitPrice><![CDATA[$8.99]]></UnitPrice>
<InkColor>Blue</InkColor>
</Item>
</Items>
Here is the function to make it happen
public string PopulateStringBuilder(Order order, Template template)
{
var i = new StringBuilder(template.Description);
List<string> s = new List<string>();
var reqID = order.OrderId;
foreach (var x in order.Items)
{
i.Replace("[[item_sku]]", x.SkuNumber);
i.Replace("[[item_product_name]]", x.ProductName);
i.Replace("[[item_name]]", x.Description);
i.Replace("[[item_attributes]]", x.Attributes);
i.Replace("[[item_qty]]", x.Quantity.ToString());
i.Replace("[[item_price]]", x.UnitPrice.ToString());
i.Replace("[[item_inkcolor]]", x.InkColor);
o.Replace("[[items]]", i.ToString());
}
return o.ToString();
}