0
J'ai les xsd suivants Snippet:XSLT: Manipulation Noeud sélectif
<xs:complexType name="HighSchoolType">
<xs:sequence>
<xs:element name="OrganizationName" type="core:OrganizationNameType"/>
<xs:group ref="core:OrganizationIDGroup" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Je veux gérer xs: balises d'élément différemment xs: étiquettes de groupe, tout en ignorant complètement xs: annotation et xs: balises de restriction. Quand j'ai un:
- xs: balise d'élément, je veux le copier.
- xs: étiquette de groupe, je veux que la sortie contienne les enfants de la balise xs: group tags.
- Toute autre balise peut être ignorée, je ne veux pas dans ma sortie
J'ai essayé d'utiliser:
<xsl:template match="xs:complexType">
<xsl:copy>
<xsl:choose>
<xsl:when test="*[self::xs:element]|@*">
<xsl:copy-of select="."/>
</xsl:when>
<xsl:when test="*[self::xs:group]|@*">
<xsl:apply-templates select="."/>
</xsl:when>
</xsl:choose>
</xsl:copy>
</xsl:template>
Je ne comprends pas pourquoi ceci:
<xsl:copy-of select="*[not(self::xs:annotation or self::xs:restriction)]|@*"/>
... exclura xs: annotation & xs: restriction de nœuds tandis que
<xsl:when test="*[self::xs:element]|@*">
<xsl:copy-of select="."/>
</xsl:when>
... retourne tout temps:
<xsl:when test="*[self::xs:group]|@*">
<xsl:apply-templates select="."/>
</xsl:when>
... ne déclenche:
<xsl:variable name="core" select="document('CoreMain_v1.4.0.xsd')" />
<xsl:variable name="AcRec" select="document('AcademicRecord_v1.3.0.xsd')" />
<xsl:template match="xs:group[@ref]">
<xsl:variable name="name" select="substring-after(@ref, ':')" />
<xsl:choose>
<xsl:when test="substring-before(@ref, ':') = 'AcRec'">
<xsl:apply-templates select="$AcRec//*[@name=$name]" />
</xsl:when>
<xsl:when test="substring-before(@ref, ':') = 'core'">
<xsl:apply-templates select="$core//*[@name=$name]" />
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="xs:group[@name]">
<xsl:copy-of select="node()[not(self::xs:annotation|self::xs:restriction)]|@*"/>
</xsl:template>