[VB6] Remplacer l'ensemble des contenus des nodes par des CDATA

Remplacer l'ensemble des contenus des nodes par des CDATA [VB6] - VB/VBA/VBS - Programmation

Marsh Posté le 29-10-2015 à 17:37:32    

Bonjour,

 

Je manipule un fichier XML par les méthodes DOM sous VB6, mais j'aimerai remplacer le texte de chaque node par un CDATA contenant ce texte.
Mon XML est une arborescence classique.
Y a t'il un moyen simple de faire cela ? Est ce qu'une simple commande xsl serait plus puissante ?

 

C'est vraiment pénible d'avoir les node.Text en read only pour ce genre de cas :/

 

Merci d'avance.


Message édité par Topher85 le 29-10-2015 à 17:56:58

---------------
Pseudo LoL : TheLittleTopher.
Reply

Marsh Posté le 29-10-2015 à 17:37:32   

Reply

Marsh Posté le 30-10-2015 à 16:53:17    

Bon, j'ai pu avancer, j'arrive bien à remplacer chaque contenu de balise par son contenu dans un CDATA.
En revanche, il me reste un bug que je n'arrive pas à corriger, juste après le dernier childnode, j'ai la concatenation des contenus de chaque childnode.

 

Une partie du XML en sortie  :

Code :
  1. <plate>
  2.   <tb_name><![CDATA[{0010A20F-0000-0000-EE01-4D7C9D551E04}-PLATE]]></tb_name>
  3.   <geometry>
  4.      <project><![CDATA[DCM]]></project>
  5.      <name><![CDATA[name]]></name>
  6.      <date><![CDATA[DOCUMENT_VERSION]]></date>
  7.      <view><![CDATA[?VIEW?]]></view>
  8.      <file><![CDATA[?FILE?]]></file>
  9. <![CDATA[nameDOCUMENT_VERSION?VIEW??FILE?]]>   </geometry>
  10.     <feasibility><![CDATA[]]></feasibility>
  11. </plate>
 


Le XML que je voudrais  :

Code :
  1. <plate>
  2.   <tb_name><![CDATA[{0010A20F-0000-0000-EE01-4D7C9D551E04}-PLATE]]></tb_name>
  3.   <geometry>
  4.      <project><![CDATA[DCM]]></project>
  5.      <name><![CDATA[name]]></name>
  6.      <date><![CDATA[DOCUMENT_VERSION]]></date>
  7.      <view><![CDATA[?VIEW?]]></view>
  8.      <file><![CDATA[?FILE?]]></file>
  9.   </geometry>
  10.     <feasibility><![CDATA[]]></feasibility>
  11. </plate>
 

La fonction récursive de traitement à laquelle je passe le XMLDOMElement <plate> :

 
Code :
  1. Private Sub ConvertIntoCDATA(ByVal oDoc As IXMLDOMDocument, ByVal oNode As IXMLDOMNode)
  2.     Dim oNodeParent             As IXMLDOMElement
  3.     Dim oNodeCreated            As IXMLDOMElement
  4.    
  5.     Dim oNodeCreatedCDATA       As IXMLDOMCDATASection
  6.    
  7.     Dim oChild                  As IXMLDOMNode
  8.     Dim sChild                  As IXMLDOMNode
  9.     Dim child                   As IXMLDOMNode
  10.     Dim text_only               As Boolean
  11.     ' Do nothing if this is a text node.
  12.     If TypeOf oNode Is IXMLDOMText Then Exit Sub
  13.    
  14.     ' See if this node contains only text.
  15.     text_only = True
  16.     If oNode.hasChildNodes Then
  17.         For Each child In oNode.childNodes
  18.             If Not (TypeOf child Is IXMLDOMText) Then
  19.                 text_only = False
  20.                 Exit For
  21.             End If
  22.         Next child
  23.     End If
  24.     ' Process child nodes.
  25.     If oNode.hasChildNodes Then
  26.         Set oNodeParent = oNode.parentNode
  27.         Set oNodeCreated = oDoc.createElement(oNode.baseName)
  28.         Set oNodeCreatedCDATA = oDoc.createCDATASection(oNode.Text)
  29.         For Each oChild In oNode.childNodes
  30.             If text_only = True Then
  31.                 If oNode.lastChild.baseName = oChild.baseName Then
  32.                    Call oNode.removeChild(oChild)
  33.                 End If
  34.             End If
  35.             ConvertIntoCDATA oDoc, oChild
  36.         Next
  37.        
  38.         Call oNode.appendChild(oNodeCreatedCDATA)
  39.     End If
  40. End Sub
 

Je n'arrive pas à faire disparaître cette concatenation :(


Message édité par Topher85 le 30-10-2015 à 17:03:54

---------------
Pseudo LoL : TheLittleTopher.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed