Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用xslt重新排列XSD xs:sequence以转换为另一个XSD_Xml_Xslt_Xsd - Fatal编程技术网

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>