我有一个现有的 XSD,其中定义了一系列复杂类型。我需要为每种类型构建一个相关的 XSD,但每种复杂类型中的每个元素都必须是可选的(minOccurs = "0")。
我发现这个帖子作为一个例子从......开始,但我无法添加可选标签。 使用 xsl 将一个 xml 模式模板转换为另一个 xml 模式模板
比我更精通 XSLT 的人有什么帮助吗?
我有一个现有的 XSD,其中定义了一系列复杂类型。我需要为每种类型构建一个相关的 XSD,但每种复杂类型中的每个元素都必须是可选的(minOccurs = "0")。
我发现这个帖子作为一个例子从......开始,但我无法添加可选标签。 使用 xsl 将一个 xml 模式模板转换为另一个 xml 模式模板
比我更精通 XSLT 的人有什么帮助吗?
由于您没有提供示例,因此我没有进行太多测试,但是遵循基于身份转换的样式表可以完成工作。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Identity transform - copy everything into output -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<!-- for not-root xs:element ... -->
<xsl:template match="xs:element[ancestor::xs:complexType]">
<xsl:copy>
<!-- ... add minOccurs element ...-->
<xsl:attribute name="minOccurs">0</xsl:attribute>
<!-- ... and copy everything but not minOccurs attribute if any -->
<xsl:apply-templates select="node() | @*[not(name() = 'minOccurs')]" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>