Мой XSLT-фу не подходит, но да, вы можете сделать это с помощью XSLT.
На самом деле вы пытаетесь сделать только одну умную вещь - конвертировать теги кода страны втеги.
Это просто для перебора списка дочерних элементов определенного узла, вы можете получить имя тега текущего узла и вы можете выводить более или менее все, что вы хотите ... где я не уверен(это не то, что мне когда-либо приходилось делать) - это точное заклинание для получения имени узла.
Редактировать: Слишком хороший вопрос, чтобы отпустить (возможность обучения)
ОтсутствуетОтвет немного, конечно, на stackoverflow
Так что это дает вам (основываясь на том, что я знаю ... Я уверен, что копия регионов может быть упрощена, ноЯ не знаю как!):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="countries" />
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="countries">
<countries>
<xsl:for-each select="child::*">
<country code="{local-name()}">
<xsl:apply-templates select="region" />
</country>
</xsl:for-each>
</countries>
</xsl:template>
<xsl:template match="region">
<region>
<xsl:value-of select="."/>
</region>
</xsl:template>
</xsl:stylesheet>
Предложения по улучшению приветствуются - будут корректироваться по мере необходимости!