xsl でいくつかの作業を行っています - 初めて重大なことを行いましたが、説明できない何かにぶつかりました。それを示す最も簡単な方法は、恒等変換を使用することです。
これは機能します:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
これはしません(「現在のソースに変換を適用できません」と言います):
<xsl:template match="@*|node()" xml:space='preserve'>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
これは次のことを行います。
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()" xml:space='preserve'/>
</xsl:copy>
</xsl:template>
わかりました、何が起こっているかがわかります。しかし、私はその理由を理解していません。xml:space が属性をうまく処理したくないのはなぜですか? ちょっと興味があるんだけど。
ところで、これは Notepad++ に組み込まれている xsl トランスレータを使用しています。信用してはいけないのではないでしょうか?