Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier
    Template tenant compte des précédents ? Ou comment supprimer un noeud.
    Bonjour,

    Voilà mon problème, j'ai mon fichier en entrée qui possède des noeuds <location> et <anticipatedStance>. Je sais les supprimer. Cependant, j'ai besoin de faire des opérations dessus, j'ai donc un autre template qui opère sur un Path similaire, et l'écrase. Ainsi, on ne tient plus compte des templates précédents, et je me retrouve en sorti avec tjr <location> et anticipatedStance> existant.

    J'ai bien réussi à en faire disparaitre un avec un <xsl:apply-templates select="* except anticipatedStance"/>, mais je ne parviens pas à faire de même pour location (en même temps). J'ai aussi essayé d'enchainer 2 apply-templates, mais Saxon n'apprécie pas.

    Mon code XML :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <?xml version="1.0" encoding="UTF-8"?>
    <ns14:NC1_OPORD xmlns:ns14="urn:fra:nc1:message:opord"
                    xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="http://www.w3.org/2001/XMLSchema-instance"
                    xmlns:ns3="http://www.w3.org/2001/XMLSchema"
                    xmlns:ns47="urn:fra:nc1:objet:unit"
                    classification="0"
                    situation="OPO 01"
                    id="0"
                    lastChangeDatetime="2019-06-27T12:56:55.309Z"
                    majorVersion="8"
                    mediumVersion="1"
                    minorVersion="1"
                    urgencyLevel="0">
       <_3_execution>
          <A_intention>
             <maneuverStep1>
                <mixedText>ATTAQUE + RAID Du 250600 Z JUN au 251500Z JUN Appuyé massivement par l'artillerie, après avoir débouché sur ordre de LD, attaquer sur l'ensemble du fuseau, au minimum fixer au mieux débuter la destruction des BM ECH1. Lancer simultanément un raid blindé pour fixer au plus vite le 314 (RU) BC. </mixedText>
                <objects>
                   <object xsi:type="ns47:UnitType"
                           activationChangeDatetime="2019-06-27T06:50:35Z"
                           activationStatus="1"
                           id="0:6041:6"
                           isFull="1"
                           lastChangeDatetime="2019-06-27T06:50:35Z"
                           majorVersion="8"
                           mediumVersion="1"
                           minorVersion="1">
                      <tacticalData>
                         <name>311 (RU) BNMECA</name>
                         <symbolCode>APP6B:SHGPUCIZ---FXR-</symbolCode>
                      </tacticalData>
    				  <location>
                         <point>
                            <x>4.763808173392329</x>
                            <y>49.359748456781055</y>
                         </point>
                         <datetime>2019-06-20T08:02:16Z</datetime>
                         <validityPeriod>
                            <startDatetime>2019-06-20T08:02:16Z</startDatetime>
                            <duration>P2Y</duration>
                         </validityPeriod>
                      </location>
                      <anticipatedStance>
                         <validityPeriod>
                            <startDatetime>2007-06-20T08:02:16Z</startDatetime>
                            <endDatetime>2007-06-27T10:03:15Z</endDatetime>
                         </validityPeriod>
                         <locationStance>
                            <point>
                               <x>4.81506729114335</x>
                               <y>49.380025920244194</y>
                            </point>
                         </locationStance>
                      </anticipatedStance>
                      <anticipatedStance>
                         <validityPeriod>
                            <tacticalTime>1</tacticalTime>
                         </validityPeriod>
                         <locationStance>
                            <point>
                               <x>4.81606729114335</x>
                               <y>49.381025920244194</y>
                            </point>
                         </locationStance>
                      </anticipatedStance>
                      <anticipatedStance>
                         <validityPeriod>
                            <tacticalTime>2</tacticalTime>
                         </validityPeriod>
                         <locationStance>
                            <point>
                               <x>4.85506729114335</x>
                               <y>49.380025920244194</y>
                            </point>
                         </locationStance>
                      </anticipatedStance>
                   </object>
                </objects>
             </maneuverStep1>
          </A_intention>
       </_3_execution>
    </ns14:NC1_OPORD>


    Mon code XSL :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sl="http://www.w3.org/1999/XSL/Transform"
        xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />s="http://www.w3.org/2001/XMLSchema"
        xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:fn="http://www.w3.org/2005/xpath-functions"
        xmlns:nc1opord="urn:fra:nc1:message:opord"
        exclude-result-prefixes="xs fn"
        version="2.0">
        <xsl:output
            method="xml"
            encoding="UTF-8"
            indent="yes"
            omit-xml-declaration="no"
        />
        <xsl:strip-space elements="*" />
     
        <!-- On cherche les documents XML entiers -->
        <xsl:template match="/">
            <!-- On cherche tous les documents XML dans le même répértoire -->
            <xsl:for-each select="collection('./?select=*.xml')" >
                <!-- On recopie les fichiers XML de sorties dans le dossier 'resultat' avec les mêmes noms que les fichiers de départ -->
                <xsl:result-document method="xml" href="resultat/{tokenize(document-uri(.), '/')[last()]}">
                    <xsl:copy>
                        <xsl:apply-templates select="@*|node()"/>
                    </xsl:copy>
                </xsl:result-document>
            </xsl:for-each>
        </xsl:template>
     
        <xsl:template match="nc1opord:NC1_OPORD//@*|node()">
            <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
            </xsl:copy>
        </xsl:template>
     
        <xsl:template match="nc1opord:NC1_OPORD//anticipatedStance"/>
        <xsl:template match="nc1opord:NC1_OPORD//_3_execution/A_intention//object[@xsi:type[contains(., 'UnitType')]]/location"/>
     
        <xsl:template match="nc1opord:NC1_OPORD//_3_execution/A_intention">
            <xsl:copy>
                <xsl:variable name="locationManeuver">
                    <xsl:apply-templates select="*"/>            
                </xsl:variable>
                <xsl:copy-of select="$locationManeuver"></xsl:copy-of>
            </xsl:copy>
        </xsl:template> 
     
    </xsl:stylesheet>


    Je vous remercie d'avance !

  2. #2
    Modérateur

    Hello,

    aucun template n'est écrasé, dans ton exemple. Il ne sert donc à rien. Il faut un vrai exemple.

    Mais bon,

    Citation Envoyé par Tahrky Voir le message
    J'ai bien réussi à en faire disparaitre un avec un <xsl:apply-templates select="* except anticipatedStance"/>, mais je ne parviens pas à faire de même pour location (en même temps). J'ai aussi essayé d'enchainer 2 apply-templates, mais Saxon n'apprécie pas.
    Dans ce cas,

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <xsl:apply-templates select="* except (anticipatedStance | location)"/>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Désolé pour le mauvais vocabulaire, ce que j'entends par "écrasé", c'est que la recopie de
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <xsl:template match="nc1opord:NC1_OPORD//_3_execution/A_intention">

    ne tiens pas compte des 2 instructions précédentes (ce qui est normal, vu que le fichier en entrée n'est pas modifié) mais comment continuer d'opérer sur le même flux, si c'est possible ?

    Je sais qu'il n'y a pas de "séquences" ni "d'états" en XSLT, puisque c'est un langage fonctionnel. Mais peut-on récupérer les données d'un flux afin de s'en servir en entrée d'une autre fonction ?

    En gros, comment s'assurer qu'une opération X soit bien faite de partout, sans avoir à la recopier (et parfois l'adapter de manière plus ou moins complexe) à divers endroits du fichier XSL, afin d'éviter les erreurs et les oublis ?

    Sinon, le bout de code que tu m'as donné me donne exactement le résultat attendu (modulo que j'aimerais bien ne pas forcément tjr avoir à recopier des choses du genre afin d'essayer de réduire au maximum les erreurs). Mon soucis est que je n'avais pas essayé les parentheses, et que sans ça, il ne prenait que le premier paramètre ...

    Merci beaucoup pour ta réponse rapide.

  4. #4
    Modérateur

    Non vraiment, il faut des exemples.

    Cela dit, si tu es arrivé à t'en sortir convenablement, c'est aussi bien.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Apparemment, le problème que je rencontrais avant n'est plus.
    Donc, je ne sais même pas si ma question a réellement un sens ou si c'est juste que je m'y prenais mal. J'arrive à obtenir le bon résultat avec le XSLT que je cite dans mon 1er post (et qui bien sur avant ne me donnait pas le résultat attendu ...).

    Je pense ne pas saisir toute la subtilité de la différence de comportement entre '*' et '.', puisque * semble tenir compte ici des précédentes modifications. (Et que de toute façon . n'est pas autorisé, créant un comportement circulaire que saxon refuse).

    En tout cas merci pour ton aide ! Je peux de nouveau avancer, et j'ai une autre façon de faire si jamais j'ai des problèmes de la sorte qui surviendrait !

###raw>template_hook.ano_emploi###