已经有一段时间了,因为我需要XML,所以我在为正确的xslt进行以下转换而苦苦挣扎。
这是我的xml:
<?xml version="1.0" encoding="utf-8"?>
<Dic Version="1">
<Entry>
<Text Lang="en">text1</Text>
<Text Lang="de">text2</Text>
<Text Lang="fr">text3</Text>
</Entry>
<Entry>
<Text Lang="en">text1</Text>
<Text Lang="de">text2</Text>
</Entry>
</Dic>
如果缺少<Text Lang="fr" />
,则应添加它,以便输出如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Dic Version="1">
<Entry>
<Text Lang="en">text1</Text>
<Text Lang="de">text2</Text>
<Text Lang="fr">text3</Text>
</Entry>
<Entry>
<Text Lang="en">text1</Text>
<Text Lang="de">text2</Text>
<Text Lang="fr"></Text>
</Entry>
</Dic>
我尴尬的无效样式表:
<xsl:template match="Dic/Entry">
<xsl:choose>
<xsl:when test="@Lang=fr"></xsl:when>
<xsl:otherwise><Text Lang="fr"></Text></xsl:otherwise>
</xsl:choose>
</xsl:template>
非常感谢任何帮助。
答案 0 :(得分:0)
如果三种语言中的任何一种都可能丢失,那么我建议您这样做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Entry">
<xsl:copy>
<Text Lang="en"><xsl:value-of select="Text[@Lang='en']"/></Text>
<Text Lang="de"><xsl:value-of select="Text[@Lang='de']"/></Text>
<Text Lang="fr"><xsl:value-of select="Text[@Lang='fr']"/></Text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>