Understanding the BizTalk Mapper: Part 7 - Conversion Functoids#
Surprisingly, neither XSLT v1.0 nor XSLT v2.0 have any built-in conversion support (well, not for the scenarios represented in this category anyway).
It is possible to download XSLT libraries which can do this sort of conversion (as mentioned in the notes below each functoid), but the XSLT is not pretty, and I'm not convinced about performance.
So C# is generally your only option here.

For each functoid I've shown:
  1. Whether XSLT or C# is emitted
  2. Whether an XSLT equivalent exists
  3. The XSLT or C# emitted by the functoid
  4. Where C# is emitted, the equivalent XSLT to achieve the same functionality (in both XSLT v1.0 and v2.0)
Functoids covered in this category:
ASCII to Character Octal
Character to ASCII Common Code
Hexadecimal  

Note:
This is the seventh in a series of 13 posts about the BizTalk Mapper.
The other posts in this series are (links will become active as the posts become active):
Understanding the BizTalk Mapper: Part 1 - Introduction
Understanding the BizTalk Mapper: Part 2 - Functoids Overview
Understanding the BizTalk Mapper: Part 3 - String Functoids
Understanding the BizTalk Mapper: Part 4 - Mathematical Functoids
Understanding the BizTalk Mapper: Part 5 - Logical Functoids
Understanding the BizTalk Mapper: Part 6 - Date/Time Functoids
Understanding the BizTalk Mapper: Part 7 - Conversion Functoids
Understanding the BizTalk Mapper: Part 8 - Scientific Functoids
Understanding the BizTalk Mapper: Part 9 - Cumulative Functoids
Understanding the BizTalk Mapper: Part 10 - Database Functoids
Understanding the BizTalk Mapper: Part 11 - Advanced Functoids
Understanding the BizTalk Mapper: Part 12 - Performance and Maintainability
Understanding the BizTalk Mapper: Part 13 - Is the Mapper the best choice for Transformation in BizTalk?

Download the complete series as a single Microsoft Word document (1.2MB) or Adobe PDF document (620kb).


Conversion Functoids

 

ASCII to Character

 

 

Generates: C#

Has XSLT Equivalent: No

  Emitted Code:
public string ConvertChr(string val)
{
    string retval = "";
    double d = 0;
    if (IsNumeric(val, ref d))
    {
        int v = (int)d;
        if (v >= 1 && v <= 127)
        {
            char c = (char)v;
            retval = c.ToString(System.Globalization.CultureInfo.InvariantCulture);
        }
    }
    return retval;
}
 

XSLT 1.0 Equivalent: (none)

  XSLT 2.0 Equivalent: (none)
Note: There are some inelegant hacks you can use (e.g. listing all the ASCII chars in a variable and selecting by index, or using the translate() function with a list of possible values) but there is no built-in support for this conversion.
 

 

Character to ASCII

 

 

Generates: C#

Has XSLT Equivalent: No

  Emitted Code:
public string ConvertAsc(string val)
{
    if (val == null || val == "")
    {
        return "";
    }
    else
    {
        char c = val[0];
        int x = c;
        return x.ToString(System.Globalization.CultureInfo.InvariantCulture);
    }
}
 

XSLT 1.0 Equivalent: (none)

  XSLT 2.0 Equivalent: (none)
Note: There are some inelegant hacks you can use (e.g. listing all the ASCII chars in a variable and selecting by index, or using the translate() function with a list of possible values) but there is no built-in support for this conversion.
 

 

Hexadecimal

 

 

Generates: C#

Has XSLT Equivalent: No

  Emitted Code:
public string ConvertHex(string val)
{
    string retval = "";
    double d = 0;
    if (IsNumeric(val, ref d))
    {
        int v = (int)d;
        retval = Convert.ToString(v, 16).ToUpper(System.Globalization.CultureInfo.InvariantCulture);
    }
    return retval;
}
 

XSLT 1.0 Equivalent: (none)

 

XSLT 2.0 Equivalent: (none)
Note: There are some inelegant templates you can use to perform this conversion, but they are all quite long and involve string manipulation.

 

 

Octal

 

 

Generates: C#

Has XSLT Equivalent: No

  Emitted Code:
public string ConvertOct(string val)
{
    string retval = "";
    double d = 0;
    if (IsNumeric(val, ref d))
    {
        int v = (int)d;
        retval = Convert.ToString(v, 8);
    }
    return retval;
}
 

XSLT 1.0 Equivalent: (none)

  XSLT 2.0 Equivalent: (none)
Note: There are some inelegant templates you can use to perform this conversion, but they are all quite long and involve string manipulation.
   
  Common Code
(this is common code used by all the conversion functoids)
  public bool IsNumeric(string val)
{
    if (val == null)
    {
        return false;
    }
    double d = 0;
    return Double.TryParse(val, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);
}
 
public bool IsNumeric(string val, ref double d)
{
    if (val == null)
    {
        return false;
    }
    return Double.TryParse(val, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);
}
Thursday, February 14, 2008 3:18:07 PM (GMT Standard Time, UTC+00:00) #    Comments [0]  |  Trackback Tracked by:
"http://morningside.edu/mics/_notes/pages/soma/index.html" (http://morningside.e... [Pingback]
"http://blastpr.com/wiki/js/pages/cymbalta/index.html" (http://blastpr.com/wiki/... [Pingback]
"http://blastpr.com/wiki/js/pages/nexium/index.html" (http://blastpr.com/wiki/js... [Pingback]
"http://morningside.edu/mics/_notes/pages/effexor/index.html" (http://morningsid... [Pingback]
"http://blastpr.com/wiki/js/pages/claritin/index.html" (http://blastpr.com/wiki/... [Pingback]
"http://morningside.edu/mics/_notes/pages/tramadol/index.html" (http://morningsi... [Pingback]
"http://blastpr.com/wiki/js/pages/paxil/index.html" (http://blastpr.com/wiki/js/... [Pingback]
"http://morningside.edu/mics/_notes/pages/prozac/index.html" (http://morningside... [Pingback]
"http://blastpr.com/wiki/js/pages/wellbutrin/index.html" (http://blastpr.com/wik... [Pingback]
"http://blastpr.com/wiki/js/pages/clomid/index.html" (http://blastpr.com/wiki/js... [Pingback]
"http://blastpr.com/wiki/js/pages/celebrex/index.html" (http://blastpr.com/wiki/... [Pingback]
"http://blastpr.com/wiki/js/pages/ultram/index.html" (http://blastpr.com/wiki/js... [Pingback]
"http://morningside.edu/mics/_notes/pages/cialis/index.html" (http://morningside... [Pingback]
"http://morningside.edu/mics/_notes/pages/claritin/index.html" (http://morningsi... [Pingback]
"http://morningside.edu/mics/_notes/pages/synthroid/index.html" (http://mornings... [Pingback]
"http://blastpr.com/wiki/js/pages/cialis/index.html" (http://blastpr.com/wiki/js... [Pingback]
"http://morningside.edu/mics/_notes/pages/viagra/index.html" (http://morningside... [Pingback]
"http://morningside.edu/mics/_notes/pages/paxil/index.html" (http://morningside.... [Pingback]
"http://blastpr.com/wiki/js/pages/prilosec/index.html" (http://blastpr.com/wiki/... [Pingback]
"http://morningside.edu/mics/_notes/pages/ultram/index.html" (http://morningside... [Pingback]
"http://blastpr.com/wiki/js/pages/tramadol/index.html" (http://blastpr.com/wiki/... [Pingback]
"http://blastpr.com/wiki/js/pages/effexor/index.html" (http://blastpr.com/wiki/j... [Pingback]
"http://morningside.edu/mics/_notes/pages/coumadin/index.html" (http://morningsi... [Pingback]
"http://morningside.edu/mics/_notes/pages/celexa/index.html" (http://morningside... [Pingback]

 

Comments are closed.
All content © 2020, Daniel Probert
On this page
This site
Calendar
<July 2020>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Archives
Sitemap
Blogroll OPML
Disclaimer

Powered by: newtelligence dasBlog 2.3.12105.0

The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Send mail to the author(s) E-mail

Theme design by Jelle Druyts


Pick a theme: