Altova MapForce 2024 Enterprise Edition

Obtenir l'accès aux nœuds de type spécifique

Accueil Préc Haut Suivant

Comme mentionné dans la section précédente, Obtenir l'accès aux noms de nœud, vous pouvez accéder à tous les éléments enfants d'un nœud en cliquant avec la touche de droite et sélectionner la commande de menu contextuel Afficher les éléments enfants avec un Nom Dynamique. Au moment de l'exécution de mappage, cela entraîne une accessibilité du nom de chaque élément enfant par le biais du nœud node-name(), alors que la valeur est accessible par le biais d'un nœud type cast spécial. Dans l'image ci-dessous, le nœud type cast est le nœud text().

mf_generic_child_elements

 

Attention, le type de données de chaque élément enfant n'est pas connu avant l'exécution de mappage. Du reste, 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.  Afin de vous permettre d'accéder au contenu de nœud d'un type spécifique, le dialogue affiché ci-dessous s'ouvre à chaque fois que vous activez l'accès dynamique dans des éléments enfant d'un nœud. Vous pouvez aussi ouvrir ce dialogue à tout moment ultérieurement, en cliquant sur la touche Changer sélection ( mf_ic_change_selection ) située à côté du nœud element().

mf_dynamic_node_names_02

Dialogue "Paramètres d'Enfants nommés dynamiquement"

Pour accéder au contenu de chaque élément enfant au moment d'exécution de mappage, vous disposez de plusieurs options :

 

1.Accéder au contenu en tant que string. Pour ce faire, sélectionner la case à cocher text() dans le dialogue ci-dessus. Dans ce cas, un nœud text() est créé dans le composant lorsque vous refermez le dialogue. Cette option est appropriée si le contenu est de type simple (xs:int, xs:string, etc.) et est illustré dans l'Exemple : Mapper les noms d'élément dans les valeurs d'attribut. Veuillez noter qu'un nœud text() est uniquement affiché si un nœud enfant du nœud actuel peut contenir du texte.

2.Accéder au contenu en tant qu'un 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 aussi disponibles dans le dialogue ci-dessus, et vous pouvez cocher la case adjacente. Dans l'image ci-dessus, il n'y a pas de types complexes définis globalement par le schéma, pour qu'aucun ne soit disponible pour la sélection.

3.Accéder au contenu en tant que type any. Cela peut être utile dans des scénarios dans le mappage avancé (voir "Accéder aux structures profondes" ci-dessous). Pour ce faire, sélectionner la case à cocher située à côté de xs:anyType.

 

Veuillez noter que lors de l'exécution de mappage, MapForce (par le biais du nœud type cast) n'a pas d'informations par rapport à ce qu'est le type réel du nœud d'instance. C'est pourquoi, votre mappage doit accéder au contenu de nœud en utilisant le type correct. Par exemple, si vous prévoyez que le nœud d'une instance XML de source peut avoir des nœuds enfants de plusieurs types complexes, procéder comme suit :

 a) Définir le nœud type cast pour être le type complexe que vous souhaitez faire correspondre (voir item 2 dans la liste ci-dessus).

 b) Ajouter un filtre à lire depuis l'instance uniquement par le type complexe que vous souhaitez faire correspondre. Cette technique est illustrée dans Exemple : Regrouper et filtrer les nœuds par nom.

 

Accéder aux structures plus profondes

Il est possible d'accéder à des nœuds à des niveaux plus profonds dans le schéma qu'au niveau des enfants immédiats d'un nœud. Cela est utile dans les scénarios de mappage avancés. Dans des mappages simples comme Exemple : Mapper les noms d'élément sur des valeurs d'attribut, vous n'aurez pas besoin de cette technique car le mappage accède uniquement aux enfants immédiats d'un nœud XML. Néanmoins, si vous souhaitez accéder dynamiquement aux structures plus profondes comme les "petits-enfants", les "arrière-petits-enfants", etc. suivez les instructions ci-dessous :

 

1.Créer un nouveau mappage.

2.Dans le menu Insérer, cliquer sur Insérer Schéma XML/Fichier et chercher le fichier d'instance XML (dans cet exemple, le fichier Articles.xml provenant du dossier <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\).

3.Cliquer avec la touche de droite sur le nœud Articles et choisir la commande contextuelle Afficher les éléments enfant avec un nom dynamique.

4.Choisir xs:anyType depuis le dialogue "Paramètres Enfants nommés dynamiquement".

5.Cliquer avec la touche de droite sur le nœud xs:anyType et choisir à nouveau la commande contextuelle Afficher les éléments enfant avec un nom dynamique.

6.Choisir text() depuis le dialogue "Paramètres Enfants nommés dynamiquement".

 

mf_generic_grandchildren

 

Dans le composant ci-dessus, veuillez noter qu'il y a deux nœuds element(). Le second nœud element() propose un accès dynamique aux petits-enfants de l'instance <Articles> 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 d'élément "petits-enfants" (Number, Name, SinglePrice), vous pouvez établir une connexion depuis le nœud local-name()sous le deuxième nœud element() vers un item cible. De même, pour obtenir des valeurs d'élément "petits-enfants" (1, T-Shirt, 25), vous pouvez établir une connexion depuis le nœud text().

 

Bien que cela ne s'applique pas à cet exemple, dans des situations réelles, vous pouvez aussi activer des noms de nœud dynamiques pour tout nœud xs:anyType ultérieur, pour atteindre des niveaux plus profonds.

 

Veuillez noter les points suivants :

 

La touche btn_derived_type vous permet de choisir tout type dérivé depuis le schéma actuel et de l'afficher dans un nœud séparé. Cela peut uniquement être utile si vous souhaitez mapper vers ou depuis des types de schéma dérivés (voir Types de Schéma XML dérivé).

La touche Changer sélection ( mf_ic_change_selection ) située à côté d'un nœud element() ouvre le dialogue "Paramètres Enfants nommés dynamiquement" discuté dans cette rubrique.

La touche Changer sélection ( mf_ic_change_selection ) située à côté de xs:anyAttribute vous permet de choisir tout attribut défini globalement dans le schéma. De même, la touche Changer sélection ( mf_ic_change_selection ) située à côté de xs:any  permet de choisir tout élément défini globalement dans le schéma. Cela fonctionne de la même manière que le fait de mapper depuis ou vers des caractères génériques de schéma (voir aussi 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 spécifique conformément au schéma.

© 2018-2024 Altova GmbH