我們正在構建一個系統,它從數據庫中獲取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