Altova MapForce 2026 Enterprise Edition

Accéder aux nœuds d'un type spécifique

Accueil Préc Haut Suivant

Comme mentionné dans la section précédente, Accéder aux noms de nœuds, vous pouvez accéder à tous les éléments enfants d'un nœud en cliquant avec le bouton droit sur le nœud et en sélectionnant la commande du menu contextuel Afficher les éléments enfants avec un nom dynamique. Au moment de l'exécution du mappage, cela rend le nom de chaque élément enfant accessible via le nœud node-name(), tandis que la valeur est accessible via un nœud de type cast spécial. Dans l'image ci-dessous, le nœud de type cast est le nœud text().

mf_generic_child_elements

Il est important de noter que le type de données de chaque élément enfant n'est pas connu avant l'exécution du mappage. De plus, il peut être différent pour chaque élément enfant. Par exemple, un nœud product dans le fichier d'instance XML peut avoir un élément enfant id de type xs:integer et un élément enfant size de type xs:string.  Pour vous permettre d'accéder au contenu d'un nœud d'un type spécifique, la boîte de dialogue ci-dessous s'ouvre chaque fois que vous activez l'accès dynamique aux éléments enfants d'un nœud. Vous pouvez également ouvrir cette boîte de dialogue à tout moment ultérieurement, en cliquant sur le bouton Modifier la sélection ( mf_ic_change_selection ) à côté du nœud element().

mf_dynamic_node_names_02

Boîte de dialogue « Paramètres des enfants nommés dynamiquement »

Pour accéder au contenu de chaque élément enfant lors de l'exécution du mappage, plusieurs options s'offrent à vous :

 

1.Accéder au contenu sous forme de chaîne. Pour ce faire, cochez la case text() dans la boîte de dialogue ci-dessus. Dans ce cas, un nœud text() est créé sur le composant lorsque vous fermez la boîte de dialogue. Cette option convient si le contenu est de type simple (xs:int, xs:string, etc.) et est illustrée dans l'exemple : Mapper les noms d'éléments aux valeurs d'attribut. Notez qu'un nœud text() s'affiche uniquement si un nœud enfant du nœud actuel peut contenir du texte.

2.Accéder au contenu en tant que type complexe particulier autorisé par le schéma. Lorsque des types complexes personnalisés définis globalement sont autorisés par le schéma pour le nœud sélectionné, ils sont également disponibles dans la boîte de dialogue ci-dessus et vous pouvez cocher la case à côté d'eux. Dans l'image ci-dessus, aucun type complexe n'est défini globalement par le schéma, donc aucun n'est disponible pour la sélection.

3.Accédez au contenu en tant que type quelconque. Cela peut s'avérer utile dans des scénarios de mappage avancés (voir « Accès à des structures plus profondes » ci-dessous). Pour ce faire, cochez la case en regard de xs:anyType.

 

Notez qu'au moment de l'exécution du mappage, MapForce (via le nœud de type cast) ne dispose d'aucune information sur le type réel du nœud d'instance. Par conséquent, votre mappage doit accéder au contenu du nœud en utilisant le type correct. Par exemple, si vous pensez que le nœud d'une instance XML source peut avoir des nœuds enfants de divers types complexes, procédez comme suit :

 a) Définissez le nœud de type cast sur le type complexe que vous devez faire correspondre (voir le point 2 de la liste ci-dessus).

 b) Ajoutez un filtre pour lire dans l'instance uniquement le type complexe que vous devez faire correspondre.

 

Accéder à des structures plus profondes

Il est possible d'accéder à des nœuds situés à des niveaux plus profonds dans le schéma que les enfants immédiats d'un nœud. Cette fonctionnalité est utile pour les scénarios de mappage avancés. Dans les mappages simples tels que l'exemple : Mapper les noms d'éléments aux valeurs d'attribut, cette technique n'est pas nécessaire, car le mappage accède uniquement aux enfants immédiats d'un nœud XML. Toutefois, si vous devez accéder de manière dynamique à des structures plus profondes, telles que les « petits-enfants », les « arrière-petits-enfants », etc., cela est possible comme indiqué ci-dessous.

 

1.Créer un nouveau mappage.

2.Dans le menu Insertion, cliquez sur Insérer schéma/fichier XML et recherchez le fichier d'instance XML (dans cet exemple, le fichier Articles.xml du dossier <Documents>\Altova\MapForce2026\MapForceExamples\Tutorial\).

3.Cliquez avec le bouton droit sur le nœud Articles et sélectionnez la commande contextuelle Afficher les éléments enfants avec un nom dynamique.

4.Sélectionnez xs:anyType dans la boîte de dialogue « Paramètres des enfants nommés dynamiquement ».

5.Cliquez avec le bouton droit sur le nœud xs:anyType et sélectionnez à nouveau la commande contextuelle Afficher les éléments enfants avec nom dynamique.

6.Sélectionnez text() dans la boîte de dialogue « Paramètres des enfants nommés dynamiquement ».

mf_generic_grandchildren

Dans le composant ci-dessus, notez qu'il existe deux nœuds element(). Le deuxième nœud element() fournit un accès dynamique aux petits-enfants du nœud <Articles> dans l'instance Articles.xml.

 

<?xml version="1.0" encoding="UTF-8"?>
<Articles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Articles.xsd">
  <Article>
    <Number>1</Number>
    <Name>T-Shirt</Name>
    <SinglePrice>25</SinglePrice>
  </Article>
  <Article>
    <Number>2</Number>
    <Name>Socks</Name>
    <SinglePrice>2.30</SinglePrice>
  </Article>
  <Article>
    <Number>3</Number>
    <Name>Pants</Name>
    <SinglePrice>34</SinglePrice>
  </Article>
  <Article>
    <Number>4</Number>
    <Name>Jacket</Name>
    <SinglePrice>57.50</SinglePrice>
  </Article>
</Articles>

Articles.xml

Par exemple, pour obtenir les noms des éléments « petits-enfants » (Number, Name, SinglePrice), vous devez établir une connexion entre le nœud local-name() situé sous le deuxième nœud element() et un élément cible. De même, pour obtenir les valeurs des éléments « petits-enfants » (1, T-Shirt, 25), vous devez établir une connexion à partir du nœud text().

 

Bien que cela ne s'applique pas à cet exemple, dans des situations réelles, vous pouvez également activer les noms de nœuds dynamiques pour tout nœud xs:anyType suivant, afin d'atteindre des niveaux encore plus profonds.

 

Veuillez noter les points suivants :

 

Le bouton btn_derived_type vous permet de sélectionner n'importe quel type dérivé du schéma actuel et de l'afficher dans un nœud distinct. Cela peut s'avérer utile si vous devez effectuer un mappage vers ou à partir de types de schéma dérivés (voir Types de schéma XML dérivés).

Le bouton Modifier la sélection ( mf_ic_change_selection ) situé à côté d'un nœud element() ouvre la boîte de dialogue « Paramètres des enfants nommés dynamiquement » décrite dans cette rubrique.

Le bouton Modifier la sélection ( mf_ic_change_selection ) situé à côté de xs:anyAttribute vous permet de sélectionner n'importe quel attribut défini globalement dans le schéma. De même, le bouton Modifier la sélection ( mf_ic_change_selection ) situé à côté de l'élément xs:any vous permet de sélectionner n'importe quel élément défini globalement dans le schéma. Cela fonctionne de la même manière que le mappage vers ou à partir de caractères génériques de schéma (voir également Caractères génériques - xs:any / xs:anyAttribute). Si vous utilisez cette option, assurez-vous que l'attribut ou l'élément sélectionné peut réellement exister à ce niveau particulier selon le schéma.

© 2019-2025 Altova GmbH