<xsl:sort select="*[name()=$article_sorting]" /> allow you to sort by the value any child element, but it doesn't allow you to supply a completely arbitrary sort key at run-time. If you want a completely general solution, consider <xsl:sort select="saxon:evaluate($x)"/> where $x can hold any XPath expression - the trouble is this isn't available in all products.
If you don't want a completely general solution but just one of a number of possible sort keys, you can try multiple sort keys:
<xsl:sort select="*[name()=$article_sorting]" />
If $article-sorting is "" the first sort key has no effect, if it is not "" then the second sort key has no effect.
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference