Bonjour,
Je possède un fichier XML que je souhaite transformer en un autre fichier XML à l'aide d'un fichier XSLT.
Je souhaite que lorsque un id de friendlyUnit (qui peut avoir comme suite soit unit soit ennemyUnit) soit de sorte %:0:%, on vérifie que
tacticalData/commandAndControlRole soit différent de 0 ou 1. Si ce n'est pas le cas, on le passe à 2.
Voici le contenu de mon XML
Et voici le contenu de mon XSLT, qui fait la transformation sur le 2eme cas, mais pas sur le 1er (sachant que je peux avoir des dizaines de cas dans un fichier plus gros).
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 ?xml version="1.0" encoding="UTF-8"?> <NC1_OWNSITREP xmlns="urn:fra:nc1:message:ownsitrep" classification="0" mediumVersion="1" minorVersion="0" urgencyLevel="0"> <ownForcesTaskOrganizationAndPresence xmlns=""> <friendlyUnit> <unit id="0:0:0" lastChangeDatetime="2019-07-03T07:15:03.867Z" majorVersion="8" mediumVersion="1" minorVersion="0"> <extFunction xmlns:sics="http://atos.net/ns/sics"> <sics:sioc>sics</sics:sioc> </extFunction> <tacticalData> <name>PC1</name> <idOps>0425</idOps> <commandAndControlRole>1</commandAndControlRole> </tacticalData> </unit> </friendlyUnit> <friendlyUnit> <ennemyUnit id="34:0:106" lastChangeDatetime="2019-07-03T08:00:48.451Z" majorVersion="8" mediumVersion="1" minorVersion="0"> <tacticalData> <name>PC1</name> <idOps>425</idOps> <commandAndControlRole>0</commandAndControlRole> </tacticalData> </ennemyUnit> </friendlyUnit> </ownForcesTaskOrganizationAndPresence> <controlAndCoordinationMeans xmlns=""/> </NC1_OWNSITREP>
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:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:output method="xml" encoding="UTF-8" indent="yes" /> <!-- 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> <!-- Permet de recopier tous les noeuds dans le nouveau fichier --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <!-- Remplace "context" par "instance" --> <xsl:template match="//*/@context"> <xsl:attribute name="instance"><xsl:value-of select="."/></xsl:attribute> </xsl:template> <xsl:template match="//*/friendlyUnit/*[preceding::node()[@id[contains(., ':0:')]]]/tacticalData/commandAndControlRole"> <xsl:copy> <xsl:if test=". > 1"> <xsl:value-of select="."/> </xsl:if> <!-- Dans le cas de la règle schématron 19 d'OWNSITREP, on remplace 0 ou 1 par 2 --> <xsl:if test=". < 2"> <xsl:value-of select="2"/> </xsl:if> </xsl:copy> </xsl:template> </xsl:stylesheet>
Partager