Конструкция ПЕРЕКЛЮЧАТЕЛЯ была первоначально предназначена для целочисленных данных; это полно решимости, должен был использовать аргумент непосредственно в качестве индекса в "таблицу отправки", таблицу указателей. По сути, был бы единственный тест, затем запустился бы непосредственно к соответствующим нормам, а не серии тестов.
трудность здесь состоит в том, что это - использование, был обобщен для "представления в виде строки" типов, которые, очевидно, не могут использоваться в качестве индекса, и все преимущество конструкции ПЕРЕКЛЮЧАТЕЛЯ потеряно.
, Если скорость является Вашей намеченной целью, проблемой НЕ является Ваш код, но Ваша структура данных. Если пространство "имени" так просто, как Вы показываете его, лучше для кодирования его в целочисленное значение (когда данные создаются, например), и используйте это целое число в "много раз в медленной части приложения".
Я нашел это сообщение: http://www.biglist.com/lists/xsl-list/archives/200106/msg01225.html , в котором используется следующий XSLT для отступа XML, а также для сортировки атрибутов:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<!-- Sort the attributes by name. -->
<xsl:for-each select="@*">
<xsl:sort select="name( . )"/>
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()|comment()|processing-instruction()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
Я еще не пробовал, но, скорее всего, я буду придерживаться XSLT, чтобы выполнять форматирование за меня.