不同组合中的多个属性

时间:2014-02-11 18:31:13

标签: xml xslt

我已经搜索了一个(简单)解决方案来解决以下问题并且没有成功(可能关键字不好?)。也许XSLT大师可以提供帮助。

获取类似

的XML代码段
<inline bold="1">bold text</inline>
<inline super="1">superscript text</inline>
<inline bold="1" super="1">both: bold and superscript</inline>

XSL样式表可能包含以下模板:

<xsl:template match="inline[@bold='1']">
  <b>
    <xsl:apply-templates/>
  </b>
</xsl:template>

<xsl:template match="inline[@super='1']">
  <sup>
    <xsl:apply-templates/>
  </sup>
</xsl:template>

现在,实现像

这样的输出的最佳方法是什么
<b>bold text</b>
<sup>superscript text</sup>
<sup><b>both: bold and superscript</b></sup>

对于上面的例子,第三行是感兴趣的位置?

如何简单地应用多个属性值及其组合?给出的示例是具有多个属性的最微不足道的形式,这些属性都导致不同的输出,而它们的所有组合也是有效的。下一步将是<inline bold="1" underline="1" super="1">。我希望有一个解决方案不需要明确地解决所有可能的组合。

1 个答案:

答案 0 :(得分:2)

使用XSLT 2.0,您可以使用http://www.w3.org/TR/xslt20/#element-next-match

<xsl:template match="inline[@bold='1']">
  <b>
    <xsl:apply-templates/>
  </b>
</xsl:template>

<xsl:template match="inline[@super='1']" priority="5">
  <sup>
    <xsl:next-match/>
  </sup>
</xsl:template>

使用XSLT 1.0,您可以使用样式表模块并执行apply-imports。