我们正在构建一个系统,它从数据库中获取XML数据,使用XSLT将其转换为XHTML,同时使用外部XML文件检索特定于文化的标签( 我们的标签翻译)。用于特定文化文本的外部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:这是xpath高效还是矫枉过正?过于复杂?
问题B:这个模型看起来是对的还是我错过了一些重要的事情,将来会证明是一个障碍?
问题C:在外部XML文件中有类似映射技术的理论/例子吗?
月2日更新复合键的使用
关键
<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>
这是一个改进?
这个问题问得好,+1所提供的functionaity /工具。请参阅我的回复,了解所有问题的具体答案,并指出有效实施的示例。 – 2010-11-16 02:22:16