使用XSL从大型模式文件为每个复杂类型创建单独的模式

时间:2014-01-17 06:49:43

标签: xslt xsd

我们可以使用xsl从大型xsd创建多个模式(每个复杂类型一个)。

提前致谢。

我只能创建一个复杂类型的输出模式,我希望输出的文件名只是复杂类型的名称。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="xsd:complexType">
    <xsl:result-document method="xml" href="{local-name()}.xsd">
        <test>
            <xsl:copy-of select="../@* | ."/>
        </test>
    </xsl:result-document>
</xsl:template>

1 个答案:

答案 0 :(得分:1)

问题在于使用local-name()生成文件名。这将是context元素的本地名称,在本例中始终为“complexType”。

如果输入有多个complexType元素,这实际上会在处理时导致错误,因为不允许使用具有相同URI的xsl:result-document生成多个输出。来自spec

  

[ERR XTDE1490]转换生成具有相同URI的两个或多个最终结果树是不可恢复的动态错误。

您可能希望使用元素的name属性:

<xsl:result-document method="xml" href="{@name}.xsd">
  <!-- ... -->
</xsl:result-document>