私はXSLTが新しく、したがって、属性の存在をチェックするためのベストプラクティスを知りたいと考えています。私のXMLは次のようになります。属性が存在する場合はXSLT
'item'要素の 'lang'-attributeはオプションです。
ここでは、 "lang"属性を持っているかどうかを確認しながら、-loopを使って項目をループします。そうであれば、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>
どのようなご提案ですか?
あなたは例を追加できますあなたが入力した入力を正確な出力に与える必要がありますか? –
Carlo、あなたは欲しい出力を提供するのを忘れました - 私はあなたが現在の 'lang'属性値を置き換えるために拡張言語文字列を使いたいと思っていました。提供されたXML文書に変換が適用されたときに質問を編集して、望ましい結果を提供してください。 –