如何再次转换从XSLT获得的XML输出

时间:2019-04-12 14:50:52

标签: xslt xslt-1.0

我是否可以使用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 ?

1 个答案:

答案 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处理器都可以使用此功能。