XSLT属性変換の二重高さ

XSLT属性変換の二重高さ

HTMLに変換するXML文書があります。省略したい不要な属性が多いですが、キャプチャしたい属性は以下のように2つあります。

源泉

<element att1="yes" att2="no" att3="yes">Text</element>

希望の出力

<span class="att1">Text</span>

したがって、att1またはがatt2「はい」の場合、その属性名を使用してクラス属性が生成され、他のすべての属性は省略され、要素は範囲に変換されます。

ソース文書とatt1att2相互に排他的でなければなりません。一方が「はい」と答えた場合、もう一方は存在する場合もあれば存在しない場合もあります。

答え1

以下は1つのアプローチです(XSLT 2.0+)。

<xsl:template match="element[(@att1, @att2)='yes']">
  <span class="{name((@att1, @att2)[.='yes'][1])}">
    <xsl:value-of select="."/>
  </span>
</xsl:template>

<xsl:template match="element">
  <!-- you haven't said what output you want if neither attribute is "yes" -->
</xsl:template>

関連情報