ステートメントを増やしたり減らしたりして、 (プル中心ではなく) プッシュ中心の XSLTを試してみてください。apply-templates
for-each
要素またはその属性の定義が同じテンプレートになければならないということは何もありません。したがって、要素のテンプレートを作成するときは、要素とすべての属性を<text>
作成するだけです。<input>
apply-templates
<xsl:template match="text">
<input>
<xsl:apply-templates select="@*"/>
<label><xsl:value-of select="." /></label>
</input>
</xsl:template>
第二に、あなたがやろうとしているのは、文字通り属性を新しいドキュメントにコピーすることですcopy
.
<xsl:template match="text/@*">
<xsl:copy/>
</xsl:template>
それで、ここに完全なスタイルシートがあります...
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/texts">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="text">
<input>
<xsl:apply-templates select="@*"/>
<label><xsl:value-of select="." /></label>
</input>
</xsl:template>
<xsl:template match="text/@*">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
... この入力 XML ドキュメントに適用すると...
<texts>
<text name='text_name' value='text_value'>text_display</text>
<text name='text_name2' value='text_value2'>other_display</text>
</texts>
... この結果は XML になります
<input name="text_name" value="text_value">
<label>text_display</label>
</input>
<input name="text_name2" value="text_value2">
<label>other_display</label>
</input>