我有这个XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl">
<xsl:param name="navigation-xml">
<item id="home" title-en="Services" title-de="Leistungen" />
<item id="company" title-en="Company" title-de="Unternehmen" />
<item id="references" title-en="References" title-de="Referenzen" />
</xsl:param>
<xsl:param name="navigation" select="exsl:node-set($navigation-xml)/*" />
<xsl:param name="navigation-id" />
<xsl:template name="title">
<xsl:apply-templates select="$navigation" mode="title" />
</xsl:template>
<xsl:template match="item" mode="title">
<xsl:if test="$navigation-id = @id">
<xsl:choose>
<xsl:when test="$current-language = 'de'">
<xsl:value-of select="@title-de" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@title-en" />
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
如何重构最后12行,以便动态确定属性名称(@title-de
或@title-en
),而不是以我所做的(愚蠢)方式确定?
感谢您的帮助。
答案 0 :(得分:2)
你可以写
<xsl:template name="title">
<xsl:apply-templates select="$navigation" mode="title" />
</xsl:template>
<xsl:template match="item" mode="title">
<xsl:if test="$navigation-id = @id">
<xsl:choose>
<xsl:when test="$current-language = 'de'">
<xsl:value-of select="@title-de" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@title-en" />
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
作为
<xsl:template name="title">
<xsl:apply-templates select="$navigation[$navigation-id = @id]" mode="title" />
</xsl:template>
<xsl:template match="item" mode="title">
<xsl:value-of select="@*[local-name() = concat('title-', $current-language)]" />
</xsl:template>
答案 1 :(得分:1)
恕我直言,你的问题开始的时间要早得多。如果您将navigation-xml
参数定义为:
<xsl:param name="navigation-xml">
<item id="home">
<title lang="en">Services</title>
<title lang="de">Leistungen</title>
</item>
<item id="company">
<title lang="en">Company</title>
<title lang="de">Unternehmen</title>
</item>
<item id="references">
<title lang="en">References</title>
<title lang="de">Referenzen</title>
</item>
</xsl:param>
您将能够更方便,更优雅地处理其各个节点。