private/ConvertTo-XmlTag.ps1

function ConvertTo-XmlTag{

    [CmdletBinding()]
    param (
        [Parameter(Mandatory, Position=0)]
        [string]$TagName,

        [Parameter(Position=1)]
        [string]$Content,

        [Parameter(Position=2)]
        [ValidateSet('Salesforce', 'Url', 'Xml')]
        [string]$EncodingStyle = 'Xml',

        [Parameter()]
        [switch]$IsTrueFalseNull,

        [Parameter()]
        # [switch]$SkipBlank,
        [switch]$ForceEmptyTag,

        [Parameter()]
        [int]$MaxLen
    )

    $ErrorActionPreference = 'Stop'
    [bool] $IsDebug   = $DebugPreference   -ne 'SilentlyContinue'
    [bool] $IsVerbose = $VerbosePreference -ne 'SilentlyContinue'

    $Content = $Content.Trim()

    if ($MaxLen -and ($Content.Length -gt $MaxLen)) {
        $Content = $Content.SubString(0, $MaxLen).Trim()
    }

    if ($IsTrueFalseNull) {

        $xml = switch ($Content) {
            'X'         { "<$TagName>true</$TagName>" }
            '--'        { "<$TagName>false</$TagName>" }
            '-'         { "<$TagName>false</$TagName>" }
            'true'      { "<$TagName>true</$TagName>" }
            'false'     { "<$TagName>false</$TagName>" }
            '.'         { '' }
            ''          { $ForceEmptyTag ? "<$TagName></$TagName>" : '' }
            Default     { '' }
        }

    } else {

        $xml = switch ($Content) {
            '.'         { '' }
            ''          { $ForceEmptyTag ? "<$TagName></$TagName>" : '' }
            Default     { "<$TagName>$(ConvertTo-EncodedString $Content $EncodingStyle)</$TagName>" }
        }

    }
    return $xml
}