我遇到一种情况,特殊元素(xs:simpleType,xs:complexType)会在遇到它们时放在输出中:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="HighSchoolType">
<xs:sequence>
<xs:element name="OrganizationName" type="core:OrganizationNameType"/>
<xs:element name="OPEID" type="core:OPEIDType"/>
<xs:simpleType name="OPEIDType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="OrganizationNameType"/>
</xs:schema>
我更喜欢xs:simpleType始终附加到根,无论在源中遇到模式的位置。 IE:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="HighSchoolType">
<xs:sequence>
<xs:element name="OrganizationName" type="core:OrganizationNameType"/>
<xs:element name="OPEID" type="core:OPEIDType"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="OrganizationNameType"/>
<xs:simpleType name="OPEIDType"/>
</xs:schema>
此时是否可以停止重复?
这是我目前正在使用的模板:
<xsl:template match="xs:simpleType">
<xsl:copy>
<xsl:copy-of select="*[not(self::xs:annotation or self::xs:restriction)]|@*"/>
</xsl:copy>
</xsl:template>
答案 0 :(得分:1)
这样的事情应该有效:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/xs:schema">
<xsl:copy>
<xsl:apply-templates/>
<xsl:copy-of select="//xs:simpleType"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[name()!='xs:simpleType' and name()!='xs:schema']">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>