如何使用XSLT 2.0实现XML格式简单双语词典的反转转换
修正后的XSLT实现
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:template match="items"> <items> <xsl:for-each-group select="item" group-by="vertacl/verta|voorbcl/verta/@reverseword"> <xsl:variable name="current-entry" select="current-grouping-key()"/> <item> <!-- 生成新词条簇 --> <trefwcl> <trefw><xsl:value-of select="$current-entry"/></trefw> </trefwcl> <!-- 转换原词条簇为新译文簇 --> <xsl:for-each select="current-group()/trefwcl"> <vertacl> <verta><xsl:value-of select="trefw"/></verta> <xsl:copy-of select="label"/> </vertacl> </xsl:for-each> <!-- 处理反转示例簇 --> <xsl:variable name="match-voorb" select="//voorbcl[verta/@reverseword = $current-entry]"/> <xsl:if test="$match-voorb"> <voorbcl> <voorb><xsl:value-of select="$match-voorb/verta[@reverseword = $current-entry]"/></voorb> <verta><xsl:value-of select="$match-voorb/voorb"/></verta> </voorbcl> </xsl:if> </item> </xsl:for-each-group> </items> </xsl:template> </xsl:stylesheet>
修改说明
- 保留原有分组逻辑,以原译文字段和示例的反向映射属性
reverseword为分组键生成新词条 - 将原有分组内的词条簇
trefwcl转换为新的译文簇vertacl,原词条内容作为新译文,保留原有词性标签label - 匹配所有
reverseword等于当前新词条的示例,反转示例原文和译文的位置生成新的示例簇
内容的提问来源于stack exchange,提问作者Robert E
相关产品推荐
相关产品推荐

