我的XML文件模板类似领域的XSLT
...
<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中......
不知道所有的细节,我会说,有两个元素“元素1”和“元素2”具有相同的结构气味的坏的XML设计,和我通常的政策设计糟糕的XML输入是将任务分成两部分:首先进行一次转换,清理XML并将其转换为设计良好的XML,然后再进行另一种转换,以完成真正的工作。 –