我对 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”属性是可选的。
现在我想使用 -loop 遍历这些项目,同时检查它是否具有“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>
有什么建议/提示吗?