在XSLT中应用模板与下一个匹配

时间:2012-10-26 12:38:42

标签: xslt xslt-2.0

给出这样的XML:

<a id="1">
  <b>
    <code>42</code>
  </b>
</a>

目标是:

<request>
  <aId>1</aId>
  <bCode>42</bCode>
</request>

我可以使用这个XSLT达到目的:

<template match="/">
  <element name="request">
    <apply-templates/>
  </element>
</template>

<template match="a">
  <element name="aId"><value-of select="@id"/></element>
  <apply-templates/>
</template>

<template match="b/code">
  <element name="bCode"><value-of select="."/></element>
</template>

但是,如果我将<apply-templates/><next-match/>交换,这也有效。当它们似乎都正常工作的时候,有什么建议吗?如果我稍后添加更多内容,next-match是否会产生额外的影响?

1 个答案:

答案 0 :(得分:1)

那么在这种情况下,您对next-match的使用依赖于执行apply-templates的内置元素模板(请参阅http://www.w3.org/TR/xslt20/#built-in-rule)。一旦你为元素添加了一个模板,例如

<xsl:template match="*">
  <xsl:copy>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

next-match将不再使用除apply-templates之外什么都不做的内置模板,但会选择上面添加结果节点的模板。

因此,对于您的代码,我会继续使用apply-templates