Bonjour à tous,
je suis plutôt débutant en vb.net et voici mon problème :
mon programme est une interface entre 2 programmes. Le but est de modifier la valeur de certains nœuds qui ne correspondent pas à la valeur attendue dans le logiciel de destination.
je modifie la valeur des nœuds dans un fichier type XML. La modification se fait bien pas de problème mais,
le format de sortie est très différent de celui d'origine et du coup ça ne passe pas dans le logiciel de destination
voici mon format XML original (en partie il fait près de 15000 lignes) :
Code XML : 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 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <p:Aller xmlns:p="http://www.xx.net" xmlns:acta="http://www.xx.net" xmlns:buda="http://www.xxx.net" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="ID0000000000"> <DepenseAller> <Bordereau> <Piece> <BlocPiece> <InfoPce> <IdPce V="1006"></IdPce> <TypPce V="01"></TypPce> <NatPce V="09"></NatPce> <Obj V="CP.CHATEAU"></Obj> </InfoPce> </BlocPiece> </Piece> </Bordereau> </DepenseAller> <Fichier MIMEType="application/pdf">H4sIAAAAAAAAAHS3Y5AmTdA2eo9t27Zt27Zt27Zndmzt2LZ2bNs7tmfOPu/3fj/OiTjZVZVXXlGZ 3Z1ZHZFNpigqTsdEzwZNdvf28gxNxkLPCs1OyEjoYGwNzcvLIGzl6qJo5iziYOfoYG9m70rIySDi (... environ 2000 lignes de ce type entre les 2 nodes <fichier></fichier>...) YOvgrOJoZGLGIGrmbmViJuFs5MUgbmXraubMIK2oKWpm4mBqxiBpZmVh6UrIwsbEySBrZm/haknI </Fichier> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="signature"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /> </ds:SignedInfo> </ds:Signature></p:Aller>
voici le format que j’obtiens en sortie :
Code XML : 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 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <p:Aller xmlns:p="http://www.xx.net" xmlns:acta="http://www.xx.net" xmlns:buda="http://www.xxx.net" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Id="ID0000000000"> <DepenseAller> <Bordereau> <Piece> <BlocPiece> <InfoPce> <IdPce V="1006"> </IdPce> <TypPce V="11"> </TypPce> <NatPce V="11"> </NatPce> <Obj V="CP.CHATEAU"> </Obj> </InfoPce> </BlocPiece> </Piece> </Bordereau> </DepenseAller> <Fichier MIMEType="application/pdf">H4sIAAAAAAAAAHS3Y5AmTdA2eo9t27Zt27Zt27Zndmzt2LZ2bNs7tmfOPu/3fj/OiTjZVZVXXlGZ 3Z1ZHZFNpigqTsdEzwZNdvf28gxNxkLPCs1OyEjoYGwNzcvLIGzl6qJo5iziYOfoYG9m70rIySDi (... environ 2000 lignes de ce type entre les 2 nodes <fichier></fichier>...) YOvgrOJoZGLGIGrmbmViJuFs5MUgbmXraubMIK2oKWpm4mBqxiBpZmVh6UrIwsbEySBrZm/haknI </Fichier> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="signature"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> </ds:SignedInfo> </ds:Signature> </p:Aller>
et voici mon code VB :
à l'enregistrement il me met des CRLF entre le début et la fin de tout les noeuds ne possédant pas de valeur, il rajoutes des espace au début des nœuds et en fin de fichier (partie signature) il remplace les tabulation par des espaces
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 Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Dim resource As String = "C:\temp\64300.xml" Dim resource2 As String = "C:\temp\64300-2.xml" Dim textdest As String = "11" Dim textsource As String = "11" Dim xDoc As New XmlDocument xDoc.Load(resource) Dim NatPce As XmlNodeList = xDoc.GetElementsByTagName("NatPce") Dim TypPce As XmlNodeList = xDoc.GetElementsByTagName("TypPce") For Each node As XmlNode In NatPce node.Attributes("V").Value = textdest Next node For Each node As XmlNode In TypPce node.Attributes("V").Value = textsource Next node xDoc.Save(resource2) End Sub
j'ai essayé au début en traitant comme du texte (comme je faisais souvent en VBS), mais ça plantais (probablement du fait de la taille du fichier).
j'ai donc trouvé cette solution, mais le format de sortie n'est pas bon...
je cherche depuis plusieurs jour un moyen de modifier les valeurs des nœuds de ce type de fichier XML sans changer le format, mais je n'y arrive pas
si quelqu'un à une idée je suis preneur
Merci d'avance
Olivier
Partager