私は XSLT にまったく慣れていないので、属性の存在を確認するためのベスト プラクティスを知りたいと思っています。私のXMLは次のようになります。
<root>
<languages>
<lang id="EN">English<lang>
<lang id="FR">French<lang>
<lang id="DE">German</lang>
</languages>
<items>
<item lang="EN">test 1</item>
<item>test 2</item>
<item lang="FR">item 3</item>
</items>
</root>
「item」要素の「lang」属性はオプションであることに注意してください。
「lang」属性があるかどうかを確認しながら、ループを使用してアイテムをループしたいと思います。そうであれば、ID を使用して文字列全体を取得したいと考えています (例: EN -> 'English')。属性が設定されていない場合は、「言語が設定されていません」などと書きたいと思います。
現在、次のコードを使用していますが、より効率的な方法で実行できないかどうか自問しています。
<xsl:for-each select="//root/items/item">
<xsl:variable name="cur_lang" select="@lang" /> <!-- first I store the attr lang in a variable -->
<xsl:choose>
<xsl:when test="@lang"> <!-- then i test if the attr exists -->
<xsl:value-of select="//root/languages/lang[@id=$cur_lang]" /> <!-- if so, parse the element value -->
</xsl:when>
<xsl:otherwise>
No language set <!-- else -->
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
提案/ヒントはありますか?