Xml 使用xslt重新排列XSD xs:sequence以转换为另一个XSD
我有这样的想法:Xml 使用xslt重新排列XSD xs:sequence以转换为另一个XSD,xml,xslt,xsd,Xml,Xslt,Xsd,我有这样的想法: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="PRO"> <xs:sequence> <xs:element ref="LIC" minOccurs="0" maxOccurs="
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="PRO">
<xs:sequence>
<xs:element ref="LIC" minOccurs="0"
maxOccurs="unbounded">
</xs:element>
<xs:element ref="SPEC" minOccurs="0"
maxOccurs="unbounded">
</xs:element>
<xs:element ref="NPI" minOccurs="0" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LIC">
</xs:complexType>
<xs:complexType name="SPEC">
</xs:complexType>
<xs:complexType name="NPI">
</xs:complexType>
<xs:element name="LIC" type="LIC">
</xs:element>
<xs:element name="SPEC" type="SPEC">
</xs:element>
<xs:element name="NPI" type="NPI">
</xs:element>
</xs:schema>
我想重新安排xsd,如下所示:
<xs:sequence>
<xs:element ref="NPI" minOccurs="0" maxOccurs="unbounded">
</xs:element>
<xs:element ref="SPEC" minOccurs="0"
maxOccurs="unbounded">
</xs:element>
<xs:element ref="LIC" minOccurs="0"
maxOccurs="unbounded">
</xs:element>
</xs:sequence>
没有特定的排序规则,但需要的只是这个顺序。
这只是一个样本
提前谢谢。
Biju使用多个
应用模板
控制身份转换的执行顺序。这仅适用于需要重新排列的相对较少的xs:element
元素
样式表
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xs:sequence[parent::xs:complexType/@name='PRO']">
<xsl:copy>
<xsl:apply-templates select="xs:element[@ref='NPI']"/>
<xsl:apply-templates select="xs:element[@ref='SPEC']"/>
<xsl:apply-templates select="xs:element[@ref='LIC']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="PRO">
<xs:sequence>
<xs:element ref="NPI" minOccurs="0" maxOccurs="unbounded">
</xs:element>
<xs:element ref="SPEC" minOccurs="0" maxOccurs="unbounded">
</xs:element>
<xs:element ref="LIC" minOccurs="0" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LIC">
</xs:complexType>
<xs:complexType name="SPEC">
</xs:complexType>
<xs:complexType name="NPI">
</xs:complexType>
<xs:element name="LIC" type="LIC">
</xs:element>
<xs:element name="SPEC" type="SPEC">
</xs:element>
<xs:element name="NPI" type="NPI">
</xs:element>
</xs:schema>
输出
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xs:sequence[parent::xs:complexType/@name='PRO']">
<xsl:copy>
<xsl:apply-templates select="xs:element[@ref='NPI']"/>
<xsl:apply-templates select="xs:element[@ref='SPEC']"/>
<xsl:apply-templates select="xs:element[@ref='LIC']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="PRO">
<xs:sequence>
<xs:element ref="NPI" minOccurs="0" maxOccurs="unbounded">
</xs:element>
<xs:element ref="SPEC" minOccurs="0" maxOccurs="unbounded">
</xs:element>
<xs:element ref="LIC" minOccurs="0" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LIC">
</xs:complexType>
<xs:complexType name="SPEC">
</xs:complexType>
<xs:complexType name="NPI">
</xs:complexType>
<xs:element name="LIC" type="LIC">
</xs:element>
<xs:element name="SPEC" type="SPEC">
</xs:element>
<xs:element name="NPI" type="NPI">
</xs:element>
</xs:schema>