Bon, j'arrive à un truc pas mal mais il faut que je formate ma chaine précisément et il y a deux choses encore que je ne sais pas faire correctement :
Voici ma portion de 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
| Sub Main()
Dim objXML As New XmlDocument
objXML.Load("D:/requete_input.xml")
Dim strRetour As String = String.Empty
Dim Nodes As XmlNodeList = objXML.SelectNodes("//*[name()='ds:SignedInfo']")
For Each node As XmlNode In Nodes
' 1/ Ajout des attributs à l'entête du SignedInfo
Dim XmlAttr As System.Xml.XmlAttribute = objXML.CreateAttribute("xmlns")
XmlAttr.Value = "http://www.org/H003"
node.Attributes.Append(XmlAttr)
XmlAttr = objXML.CreateAttribute("xmlns:ds")
XmlAttr.Value = "http://www.w3.org/2000/09/xmldsig#"
node.Attributes.Append(XmlAttr)
XmlAttr = objXML.CreateAttribute("xmlns:xsi")
XmlAttr.Value = "http://www.w3.org/2001/XMLSchema-instance"
node.Attributes.Append(XmlAttr)
strRetour += node.OuterXml
Next
Dim SR As New StreamWriter("D:/requete_output_SignedInfo.xml", False)
SR.Write(strRetour)
SR.Close()
End Sub |
J'obtiens un résultat presque bon :
<ds:SignedInfo xmlns="http://www.org/H003" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /><ds:Reference URI="#xpointer(//*[@authenticate='true'])"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>QNUFDmkcNYGQFUTfVKctmA6SNv6qg63cxQBdoGKRmzw=</ds:DigestValue></ds:Reference></ds:SignedInfo>
Mais :
- Il faudrait que ma requête d'output conserve l'indendation de ma requête d'input ! (or le outerXml me vire tous les retours chariot intermédiaires et les espaces également)
- Pour une raison de formatage de requête, il faut que je fasse apparaître les "closing tags". Exemple :
Au lieu d'avoir ceci :
<ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
Je devrais avoir cela :
<ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></ds:Transform>
Donc je dois faire apparaître dans mon résultat "</ds:Transform>" au lieu du /> qui vient automatiquement fermer la balise sans faire apparaître le tag fermant.
Vous savez si XmlDocument est capable de proposer ce genre d'option ? Je regarde sur le net en ce moment même pour voir...
Partager