2012-02-23 63 views
0

我们正在使用一个建模工具从组件生成wsdl。该工具生成多个wsdl文件和一个wsdl,用于导入所需的所有wsdls(有些是几个Web服务所需的常用对象)。我写了一个将所有文件合并为一个的xsl,但这会导致一些wsdls不止一次被包含,有时也会成为它自己的孩子。 这是处理进口元素的模板:防止导入相同的样式表

<xsl:template match="wsdl:import"> 
    <xsl:apply-templates select="document(@location)"/> 
</xsl:template> 

我想一个方法来测试,如果文件已经导入,如果是,忽略它。有没有办法在xsl中做到这一点?谢谢。

+0

你能,请提供一个小例子(源XML 2-3小XML文档,可以用来演示问题)。我知道如何解决这个问题,但是想用自己的词汇来表达答案。 – 2012-02-23 15:31:25

+0

Dimitre,我试着在这里粘贴代码示例,但我无法。有没有办法可以给xmls发电子邮件?谢谢。 – bretter 2012-02-24 13:48:08

回答

0
<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方法(如http://www.jenitennison.com/xslt/grouping/muenchian.html

+0

这最终会忽略所有导入。我尝试在相同的结果中将'='更改为'!='。 – bretter 2012-02-23 14:45:26

+0

调试说什么? (例如insert'''''之前'? – penartur 2012-02-23 15:10:24

+0

<调试的xmlns:XSD = “http://www.w3.org/2001/XMLSchema” 的xmlns:XS = “http://www.w3.org/2001/XMLSchema”> N1000A N1000A bretter 2012-02-23 18:43:51