


Hi,
First post, new to the platform so hoping so clever people can point me in the right direction! I'm trying to set up a personalisation block so I can convert a variable - but I'm struggling!
I have an XML string, I'm trying to extract a cost value (e.g. £1,509.10) from the string convert into a number (1,509.10), so I can subtract 10 from it). Any idea how to do this.
I've got as far as defining a variable for the XML string in the email - and I can pull out the variable and get rid of the £ sign with something like;
<%= escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount).substr(1,10)%>
I'm stuck beyond this - any help appreciated.
Views
Replies
Sign in to like this content
Total Likes
Hi @Tarquinius your post was a bit ambiguous. Did you want to remove the decimal part of the value (£1,509) or subtract 10 from the value (£1,499.10)? By the looks of your sample code you posted, its the first one. Anyway, here are both answers:
I am assuming your XML data looks something like this
<ctx>
<messageMetadata>
<MainCost>
<CostAmount>£1,509.10</CostAmount>
</MainCost>
</messageMetadata>
</ctx>
(a) - uses String.split() to get everything in front of the decimal point.(output £1,509)
<%= escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount.toString()).split(".")[0] %>
(b) - removes all non-numeric characters from the string, converts it to a float, subtracts 10, then sets the decimal places to two, converts back to a string and replaces the thousands separator back in (output £1,499.10)
<%= '£'+(parseFloat(escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount.toString()).replace(/[^0-9.]/g, ''))-10).toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') %>
Views
Replies
Sign in to like this content
Total Likes
Hi @Tarquinius your post was a bit ambiguous. Did you want to remove the decimal part of the value (£1,509) or subtract 10 from the value (£1,499.10)? By the looks of your sample code you posted, its the first one. Anyway, here are both answers:
I am assuming your XML data looks something like this
<ctx>
<messageMetadata>
<MainCost>
<CostAmount>£1,509.10</CostAmount>
</MainCost>
</messageMetadata>
</ctx>
(a) - uses String.split() to get everything in front of the decimal point.(output £1,509)
<%= escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount.toString()).split(".")[0] %>
(b) - removes all non-numeric characters from the string, converts it to a float, subtracts 10, then sets the decimal places to two, converts back to a string and replaces the thousands separator back in (output £1,499.10)
<%= '£'+(parseFloat(escapeXmlStr(ctx.messageMetadata.MainCost.CostAmount.toString()).replace(/[^0-9.]/g, ''))-10).toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') %>
Views
Replies
Sign in to like this content
Total Likes
<removed> - added to original post
Views
Replies
Sign in to like this content
Total Likes
Views
Replies
Sign in to like this content
Total Likes
Views
Replies
Sign in to like this content
Total Likes