我们正在构建一个系统,从数据库获取XML数据,使用XSLT将其转换为XHTML,同时使用外部XML文件检索特定于区域性的标签(标签的翻译)。
短问题
翻译/文化特定的系统看起来合乎逻辑吗?有效率?
任何其他概念都是受欢迎的(在这种特定情况下)
详细问题
XML数据
<page id="55" objecttype="ChristianOrthodoxMonument">
<field name="uniquename">some unique name here</field>
.. multiple field elements here ..
</page>XML区域性-标签
<ChristianOrthodoxMonument>
<uniquename culture-1="Ονομασία" culture-2="Unique name" />
<birthdate culture-1="Ημ/νία γέννησης" culture-2="Date of birth" />
</ChristianOrthodoxMonument>现在,在XSLT中,我传递用于映射到标签的cultureid参数。
XSLT (示例片段)
<xsl:param name="cultureid" select="1" />
<xsl:variable name="objecttype" select="/page/@objecttype" />并映射到外部文件,该文件包含在
<xsl:variable name="culture" select="document('cultural-labels.xml')" />我创建了一个伪动态xpath
<xsl:template name="translate">
<xsl:variable name="nodename" select="@name" />
<xsl:value-of select="$culture/*[name()=$objecttype]/*[name()=$nodename]/@*[name()=concat('culture-',$cultureid)]" />
</xsl:template>每当我想要得到一个字段的标签时,我就调用它。
问题A :是有效的还是过度的?太复杂了?
问题B :这个模型看起来正确吗,还是我错过了一些将来会成为障碍的重要的东西?
问题C :是否有关于与外部XML文件类似的映射技术的理论/示例?
具有复合密钥用法的第二次更新
密钥
<xsl:key name="find-node" match="*" use="concat(name(..),'!',name())" />查找
<xsl:template name="lookup-label">
<xsl:param name="objecttype" />
<xsl:variable name="nodename" select="@name" />
<xsl:for-each select="$culture">
<xsl:value-of select="key('find-node',concat($objecttype,'!',$nodename))/@*[name()=$culturefield]" />
</xsl:for-each>
</xsl:template>这是一种改进吗?
发布于 2010-11-16 02:20:57
https://stackoverflow.com/questions/4190377
复制相似问题