我是否可以使用XSLT再次处理(第二次)在第一次处理中获得的XML?
更清楚
在进行转换的过程中,我得到了以下输出
Type 'PassedProps' does not satisfy the constraint 'object'
在我的xslt中,执行此部分的行/模板是
<processPrototypes>
<orderPrecedenceSpec origin="xxx"
target="yyy"
orderType="directOrder"/>
<orderPrecedenceSpec origin="abc"
target="lmn"
orderType="directOrder"/>
<orderPrecedenceSpec origin="xxx"
target="yyy"
orderType="directOrder"/>
<orderPrecedenceSpec origin="abc"
target="lmn"
orderType="directOrder"/>
</processPrototypes>
现在我的问题是我可以处理“ processPrototypes”输出以删除那里的重复项吗?在调用模板后的下一行中的同一xslt文件中?
这样,在再次处理之后,我的最终输出应该看起来像(没有重复),
<processPrototypes>
<xsl:call-template name="help">
</xsl:call-template>
</processPrototypes>
What to do in the next line here ? to modify the output created by the above template ?
答案 0 :(得分:1)
如果您的XSLT处理器支持node-set()
function的某些变体,则可以执行以下操作:
<xsl:variable name="prototypes">
<processPrototypes>
<xsl:call-template name="help" />
</processPrototypes>
</xsl:variable>
<xsl:apply-templates select="exslt:node-set($prototypes)" />
当您创建包含标记或XSLT处理的变量(如apply-templates
等)时(如上面的prototypes
变量),这会创建一个 node片段,该片段不能访问您访问节点集的方式。 node-set()
函数将该节点片段转换为节点集,以便您可以对其执行XSLT处理,使用XPath遍历它,等等。我相信一些主要的XSLT处理器都可以使用此功能。