【发布时间】:2012-07-17 12:56:45
【问题描述】:
我有以下文件:
<Doc>
<If cond="c">
<Expr>Expr1</Expr>
</If>
<Expr>Expr2</Expr>
</Doc>
应该创建这样的输出:
If c { Expr1 } Expr2
但是,在我的情况下,它会创建:
Expr1 If c { Expr1 } Expr2
我有以下 XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:element name="Doc">
<xsl:apply-templates select="*" />
</xsl:element>
</xsl:template>
<xsl:template match="If">
<xsl:text>if </xsl:text><xsl:value-of select="@cond"/><xsl:text> {</xsl:text>
<xsl:apply-templates select="Expr"/><xsl:text>}</xsl:text>
</xsl:template>
<xsl:template match="Expr">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="*">
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
这个想法是 Expr 元素将被转换到正确的位置。嵌套 if 是可能的。我遇到的问题是 Expr-Element 重复了。
-
简单的解决方案就是从 If 中删除 apply-templates,否则添加 }。