Changing an XML Response to an HTML output using a Map
Recently, I was working on a BizTalk Server solution where I received an XML response that was supposed to go out on an e-mail. Well, there’s no big deal about it.. just route the XML response to the SMTP port. But there was another requirement, I wanted the XML response to be stripped of all XML tags and be in a legible format, just like any other e-mail.
To give you a slightly better understanding, let’s look at the schema of the XML response.
If the response message is sent to the SMTP port, as-is, the resultant e-mail would have a plethora of XML tags, making the e-mail very difficult to read. So, to make the e-mail legible, I could use some code to strip the tags and just have the values within the tags being displayed as text. The other option was to use a map. Here’s how. Assuming that the e-mail will be an HTML document, I created a schema that depicted a typical HTML document schema, which is:
<html>
<body>
<p></p>
….
….
</body>
</html>
To translate this into XML schema, it would look like:
The above schema contains one para tag. You can have any number of para tags as you want, depending on how you want your e-mail output to look. In my solution, I only wanted to have the <element> in the XML response message mapped to the <p> element in the HTML schema. The map would look like:
So, now when the e-mail goes out, it would contain the value within the text tag as separate paragraph lines on the e-mail. Just one thing still remains, and that is to change the text encoding. In my case, I did this as part of the message construct shaped that called the map. The expression reads like this:
OutputResponse(Microsoft.XLANGs.BaseTypes.ContentType) = "text/html";
where, OutputResponse is the schema for the HTML e-mail output.