【发布时间】:2016-11-11 10:25:00
【问题描述】:
我的 xml 文件
...
<element1>
<year>1</year>
<month>5</month>
<days>3</days>
</element1>
<element2>
<year>2</year>
<month>4</month>
<days>5</days>
</element2>
...
我的 xsl-fo 模板
<fo:block>
<xsl:value-of select="//element1/years"/>
<xsl:text> years </xsl:text>
<xsl:value-of select="//element1/month"/>
<xsl:text> month </xsl:text>
<xsl:value-of select="//element1/days"/>
<xsl:text> days </xsl:text>
</fo:block>
...
<fo:block>
<xsl:value-of select="//element2/years"/>
<xsl:text> years </xsl:text>
<xsl:value-of select="//element2/month"/>
<xsl:text> month </xsl:text>
<xsl:value-of select="//element2/days"/>
<xsl:text> days </xsl:text>
</fo:block>
如您所见,这里有一个类似的代码块。 我怎样才能简化这个表达式? 应该使用什么样的模板?
我写了一个这样的模板
<xsl:template match="element1">
<xsl:value-of select="years"/>
<xsl:text> years </xsl:text>
<xsl:value-of select="month"/>
<xsl:text> month </xsl:text>
<xsl:value-of select="days"/>
<xsl:text> days </xsl:text>
</xsl:template>
并使用它
<fo:block>
<xsl:apply-templates select="element1"/>
</fo:block>
但它不适用于element2...
【问题讨论】:
-
在不了解所有细节的情况下,我会说具有相同结构的两个元素“element1”和“element2”会散发出糟糕的 XML 设计气味,而我通常使用设计糟糕的 XML 输入的策略是拆分任务一分为二:首先进行一次转换以清理 XML 并将其转换为设计良好的 XML,然后再进行一次转换以完成真正的工作。