我们正在构建一个系统,从数据库获取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
简短的问题翻译/文化特定的系统看起来合乎逻辑吗?
是。
有效率?
It 是高效的--不完全是您的实现。
我创建了一个伪动态xpath />,每当我想要获取字段的标签时,都会调用它。 问题A:这是有效的还是过度的?
不,这并不有效,因为整个XML文档将被多次遍历以找到特定的对象类型节点。
太复杂了?
不是的。
问题B:这个模型看起来正确吗?还是我遗漏了一些将来会成为障碍的重要的东西?
这个模型一般是可以的。
问题C:是否有任何关于类似的映射技术到外部文件的理论/示例?
有基于键的高效查找的 许多例子 --即使是这样。也见 这一个。
发布于 2010-11-16 02:36:09
下面是另一种纯XSLT方法:06.htm
另一种选择可能是从xslt (look 这里)或C# (look 这里 )调用java函数。这有许多优点。
https://stackoverflow.com/questions/4190377
复制相似问题