2010-05-12 5 views
1

Est-il possible de vérifier un élément ComplexType?XSLT Type Vérification

i ont ce (simplifié):

complexType Record 
complexType Customer extension of Record 
complexType Person extension of Record 

<xsl:template match="/"> 
    <records> 
    <xsl:apply-templates /> 
    </records> 
</xsl:template> 

<xsl:template match="!!! TYPECHECK FOR RECORD !!!" name="Record"> 
    <record><xsl:value-of select="." /></record> 
</xsl:template> 

est-il possible de vérifier elementstype incl. l'héritage?

Je ne connais pas le nom des éléments seulement qu'ils sont un sous-type de Record.

schema 1: 
    complexType name="Customer" 
     extension base="Record" 

    element name="customers" 
     element name="customer" type="Customer" 

schema 2: 
    complexType name="Person" 
     extension base="Record" 

    element name="persons" 
     element name="person" type="Person" 

schema ?: 
    complexType name="UnknownType" 
     extension base="Record" 

    element name="unknowns" 
     element name="unknown" type="UnknownType" 

xml 1: 
<customers> 
    <customer /> 
    <customer /> 
</customers> 

xml 2: 
<persons> 
    <person /> 
    <person /> 
</persons> 

xml ?: 
<?s> 
    <? /> 
    <? /> 
</?s> 

la coutume ist entrée xml donc je dois correspondre par le type (je pense)

+0

Bonne question (1). Voir ma réponse pour une solution. :) –

Répondre

0

Je ne suis pas sûr de ce que vous voulez dire.

Différents types ont des noms de variables différents, et dans xslt, vous devriez regarder ceux qui décident du type de nœud. S'assurer qu'un nœud a en effet une structure prescrite par votre logique n'est pas une tâche xslt. Vous devez valider le document par rapport à un schéma avant de le transmettre à un processeur xslt pour y parvenir.

EDIT

Je ne suis toujours pas sûr, mais il semble que la mienne this question pourrait être d'une certaine aide.

+0

le nom de l'élément n'est pas lié au type, c'est juste une représentation dans un arbre: complexType name = "Record" ... élément name = "x" type = "Record", nom de l'élément = "y "type =" Record ". sont tous deux des enregistrements. dans ma situation je ne peux pas utiliser le nom de l'élément parce que je ne le connais pas. –

+0

Vous devrez peut-être publier votre XML actuel avant de comprendre ce que vous demandez. Je suis perdu, franchement. –

+0

Toujours pas sûr, mais visitez le lien pour voir si cela aide du tout. – GSerg

1

Dans XPath 2.0 (et cela signifie XSLT 2.0), on peut utiliser l'opérateur instance-of:

. instance-of element(*, my:Record)