XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="aaa">
<ddd>
<xsl:value-of select="substring-before(.,'[')"/>
<dv name="{substring-before(substring-after(.,'['),']')}"/>
</ddd>
</xsl:template>
</xsl:stylesheet>
又は
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="aaa">
<ddd>
<xsl:value-of select="tokenize(.,'\[')[1]"/>
<dv name="{tokenize(tokenize(.,'\[')[2],'\]')[1]}"/>
</ddd>
</xsl:template>
</xsl:stylesheet>
EDIT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="aaa">
<ddd>
<xsl:apply-templates select="node()|@*"/>
</ddd>
</xsl:template>
<xsl:template match="content|component">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="strong">
<dv name="{normalize-space(.)}"/>
</xsl:template>
</xsl:stylesheet>
ありがとうございました。質問を編集しましたが、再帰的に行う方法のように答えを変更できますか? – Patan
@muzimil - 再帰的に何を意味するのか分かりません。あなたの新しい入出力の例では、文字列の操作はまったく必要ありません。 'content'、' component'、 'strong'要素を削除し、' aaa'要素の名前を変更するだけです。 –
コンテンツの一部を削除していません。[a_b_c]などです。再帰的に言えば、複数回実行する必要がある(複数のものを削除する必要がある場合)ことを意味します。 – Patan