これはこれに関する唯一の質問ではありませんが、コードが間違っている理由を他のソリューションから理解できませんでした。これは割り当て用であり、ほとんどを理解しましたが、条件が真と評価されない理由がわかりません。contains('a', 'a')
or even thenなどのダミー句を作成すると1=1
、適切な出力が表示されます (もちろん、条件によってフィルター処理されていません)。
また、何も使用せずに現在の要素の名前を出力しようとすると、出力され<xsl:value-of select="name(.)" />
ます。明らかに、私がここに到達していないものがありますが、それは私を逃れています. どんな手掛かり ?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes" encoding="ISO-8859-1"/>
<xsl:template match="/">
<xsl:apply-templates select="node()" />
</xsl:template>
<xsl:template match=".">
<xsl:if test="contains(name(.),'a')">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="child::node()" />
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
この場合、XML スキーマはまったく問題になりません。一部の要素には文字 a が含まれていることを知っています (ルート要素を含む)。
また、呼び出す<xsl:value-of select="name(node())" />
と、XSLT ドキュメントによって処理されているファイル内の現在のノードの名前ではなく、XSLT ファイル ノード ("xsl:stylesheet") の名前が取得されるのはなぜですか?
ありがとう !