Xslt 防止导入相同的样式表

Xslt 防止导入相同的样式表,xslt,Xslt,我们正在使用一个建模工具,该工具从组件生成wsdl。该工具生成多个wsdl文件和一个wsdl,该wsdl导入它所需的所有wsdl,其中一些是多个web服务所需的公共对象。我编写了一个xsl,它将所有文件合并为一个文件,但这会导致一些WSDL被多次包含,有时甚至作为其子文件。 这是处理导入元素的模板: <xsl:template match="wsdl:import"> <xsl:apply-templates select="document(@location)"/>

我们正在使用一个建模工具,该工具从组件生成wsdl。该工具生成多个wsdl文件和一个wsdl,该wsdl导入它所需的所有wsdl,其中一些是多个web服务所需的公共对象。我编写了一个xsl,它将所有文件合并为一个文件,但这会导致一些WSDL被多次包含,有时甚至作为其子文件。 这是处理导入元素的模板:

<xsl:template match="wsdl:import">
  <xsl:apply-templates select="document(@location)"/>
</xsl:template>
我想要一种方法来测试一个文件是否已经被导入,如果是的话,忽略它。在xsl中有这样做的方法吗?谢谢

<xsl:key name="imports-by-location" match="wsdl:import" use="@location"/>

<xsl:template match="wsdl:import">
    <xsl:if test="generate-id() = generate-id(key('imports-by-location', @location))">
        <xsl:apply-templates select="document(@location)"/>
    </xsl:if>
</xsl:template>

有关更多信息,请参阅muenchian方法,例如,

这将忽略所有导入。我试着把“=”改成“!=”在测试中得到相同的结果。调试说明了什么?e、 g.在之前插入?N1000A N1000A 1看起来它只导入了一个xsl,但至少应该有2个。如果输出中只有一个xsl,则表示该xsl只匹配了一次,并且输入文件中只有一个xsl,或者您正在处理其他模板中的其他xsl。请,为2-3个小XML文档提供一个小示例源XML,用于演示问题。我知道如何解决这个问题,但是我想用你自己的词汇表来表达答案。Dimitre,我试图在这里粘贴代码示例,但我无法。有没有一种方法可以通过电子邮件将XML发送给您?谢谢