给出这样的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
是否会产生额外的影响?
答案 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
。