Bonjour,
Voilà dans le xsl, j'ai:
Dans l'output, j'obtiens:Code:<xsl:element name="{'From'}">
Y'a t-il possibilité d'enlever xmlns=""?Code:<From xmlns=""></From>
Version imprimable
Bonjour,
Voilà dans le xsl, j'ai:
Dans l'output, j'obtiens:Code:<xsl:element name="{'From'}">
Y'a t-il possibilité d'enlever xmlns=""?Code:<From xmlns=""></From>
Pourquoi tu n'as ceci déja :koi:Code:<xsl:element name="From">
Si cela ne vient pas de cette bizarrerie d'ecriture il faudrait un morceau un peu plus gros du xslt et xml pour voir d'ou cela peut venir
Merci pour ta réponse. J'ai modifié le xsl mais cela n'a rien changé.
Ci dessous le xsl complet:
Le xml utilisé en input:Code:
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
84
85
86
87
88
89
90
91
92
93
94 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="xml" /> <xsl:variable name="index" select="1"></xsl:variable> <xsl:template match="node()"> <xsl:choose> <xsl:when test="(name(..) = 'Header')"> <xsl:variable name="value-tokens" select="tokenize(current(), ';')"></xsl:variable> <xsl:variable name="tags" select="'OrganizationId;DestinationType;Destination'"></xsl:variable> <xsl:variable name="tag-tokens" select="tokenize($tags, ';')"></xsl:variable> <xsl:choose> <xsl:when test="(name(.) = 'To')" > <xsl:element name="From"> <xsl:call-template name="counter"> <xsl:with-param name="index" select="1"></xsl:with-param> <xsl:with-param name="tags" select="$tag-tokens"></xsl:with-param> <xsl:with-param name="values" select="$value-tokens"></xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:when test="(name(.) = 'From')"> <xsl:element name="To"> <xsl:call-template name="counter"> <xsl:with-param name="index" select="1"></xsl:with-param> <xsl:with-param name="tags" select="$tag-tokens"></xsl:with-param> <xsl:with-param name="values" select="$value-tokens"></xsl:with-param> </xsl:call-template> </xsl:element> </xsl:when> <xsl:otherwise> <xsl:copy> <xsl:apply-templates select="node()" /> </xsl:copy> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:when test="@type='split'"> <xsl:if test="not(self::*/@type = preceding::*/@type)"> <xsl:variable name="level" select="tokenize(@level, ';')"></xsl:variable> <xsl:element name="{$level[1]}"> <xsl:element name="{$level[2]}"> <xsl:call-template name="recursive"> <xsl:with-param name="counter" select="$index"></xsl:with-param> </xsl:call-template> </xsl:element> </xsl:element> </xsl:if> </xsl:when> <xsl:otherwise> <xsl:copy> <xsl:apply-templates select="node()" /> </xsl:copy> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="counter" match= "Header"> <xsl:param name="index"></xsl:param> <xsl:param name="tags"></xsl:param> <xsl:param name="values"></xsl:param> <xsl:if test="$index < count($tags)"> <xsl:element name="{$tags[$index]}"> <xsl:value-of select="$values[$index]"></xsl:value-of> </xsl:element> <xsl:call-template name="counter"> <xsl:with-param name="index" select="$index+1"> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="recursive" match= "SpecificSection"> <xsl:param name="counter" /> <xsl:if test="@type='split'"> <xsl:variable name="separator" select="@separator"></xsl:variable> <xsl:for-each-group select="//*" group-by="@level"> <xsl:variable name="level" select="tokenize(@level, ';')"></xsl:variable> <xsl:element name="{$level[2]}"> <xsl:for-each select="current-group()"> <xsl:variable name="tokenizedSample" select="tokenize(current(), $separator)"></xsl:variable> <xsl:element name="{name(.)}" > <xsl:value-of select="$tokenizedSample[$counter]" ></xsl:value-of> </xsl:element> </xsl:for-each> </xsl:element> <xsl:if test="$counter < 4"> <xsl:call-template name="recursive"><xsl:with-param name="counter" select="$counter+1"></xsl:with-param></xsl:call-template> </xsl:if> </xsl:for-each-group> </xsl:if> </xsl:template> </xsl:stylesheet>
Je ne suis absolument pas à l'aise avec xsl. J'ai repris un xsl fait par un collègue. Il y a plusieurs choses qui ne marchent pas :( J'essaie de le résoudre une à une .... avec votre aide ;)Code:
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 <?xml version="1.0" encoding="UTF-8"?> <NeBiEnvelope xmlns="http://www.nebi.biz/schemas/bd/nebienvelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" BusinessDocumentVersion="7.0" xsi:schemaLocation="http://www.nebi.biz/schemas/bd/nebienvelope NeBiEnvelope_L_0_3.xsd"> <Header> <From>teliasonera.com;JMS;Teliasonera</From> <To>lucent.com;JMS;Lucent</To> <Dialog>BC:Order_1.0</Dialog> <DialogId>1233554</DialogId> <MessageType>BD:ExecutionStatus_L_1.0</MessageType> <MessageId>1162909520.544.INTF_TEST@WFM014</MessageId> <Reference Role="buyer" Type="BusinessAgreement">1233554</Reference> <SequenceId>23565</SequenceId> </Header> <Body> <ExecutionStatus xmlns="http://www.nebi.biz/schemas/bd/executionstatus" BusinessDocumentVersion="7.0" Status="yes" StatusReportReason="status" xsi:schemaLocation="http://www.nebi.biz/schemas/bd/executionstatus ExecutionStatus_L_0_93.xsd"> <Reference Role="buyer">1233554</Reference> <ProductLine Number="1"> <ProgressLevel>Error:Zone Already Exists</ProgressLevel> <ProductUseCaseDetails Id="wiNotify"> <workItem xmlns="http://lucent.com/GRIPP/workitem" xsi:schemaLocation="http://lucent.com/GRIPP/workitem workItem.xsd"> <wiNotify> <wiNotifyHeader> <workItemId>1160660948248@TELIANBI</workItemId> <workItemType>NBI</workItemType> <adminState>OnTime</adminState> <createTime>07-Nov-06 15:25:11</createTime> <startTime>07-Nov-06 15:25:11</startTime> <suspendInd>0</suspendInd> <suspendReasonCode/> </wiNotifyHeader> <wiNotifyBody> <DNS02NotifyBody> <GlobalSection xmlns="http://lucent.com/GRIPP/dns02"> <Status>Error:Zone Already Exists</Status> </GlobalSection> <SpecificSection xmlns="http://lucent.com/GRIPP/dns02"> <MNS1/> <MNS2/> <MNS3/> <MNS4/> <EmailNsRipeNet/> <ParentZone/> <ParentReverseZone/> <ZoneName>me.decoker.org</ZoneName> <DelegationResult/> <DelegationReason/> <TSIGKeyName/> <SecretKey/> <RemoteSlaveFQDN level="RemoteSlaves;RemoteSlave" separator="
" type="split">test1 test2 test3</RemoteSlaveFQDN> <RemoteSlaveIP level="RemoteSlaves;RemoteSlave" separator="
" type="split">123.123.123.123 123.124.125 126.127.128.129</RemoteSlaveIP> </SpecificSection> </DNS02NotifyBody> </wiNotifyBody> </wiNotify> </workItem> </ProductUseCaseDetails> </ProductLine> </ExecutionStatus> </Body> </NeBiEnvelope>
je ne vois pas trop la raison qui fait apparaitre le xmlns!
par contre je trouve ce template recursive un peu bizarre
pourquoi dans l'appel recursive vous ne passez pas le reste des parametres (tags,values)??Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 <xsl:template name="counter" match= "Header"> <xsl:param name="index"></xsl:param> <xsl:param name="tags"></xsl:param> <xsl:param name="values"></xsl:param> <xsl:if test="$index < count($tags)"> <xsl:element name="{$tags[$index]}"> <xsl:value-of select="$values[$index]"></xsl:value-of> </xsl:element> <xsl:call-template name="counter"> <xsl:with-param name="index" select="$index+1"> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template>
Merci!!!
Cela fait déjà un problème de fixer.
Aucune idée pour le xmlns?
je soupçonne que c'est dut à tes nombreux namespaces et au fait qu'on ne les retrouves pas dans le xslt .Quel est le parseur que tu utilises ?
J'utilise Saxon 8B comme parseur xslt.
ça y est ... j'ai trouvé. Il faut ajouter namespace="{namespace-uri()}" dans chaque <xsl:element> tag. 8-)