我们可以使用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>
答案 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>