Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1767 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2268811
Topher85
Troller since 1985
Posté le 29-10-2015 à 17:37:32  profilanswer
 

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.
mood
Publicité
Posté le 29-10-2015 à 17:37:32  profilanswer
 

n°2268882
Topher85
Troller since 1985
Posté le 30-10-2015 à 16:53:17  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
Macro rechercher remplacer liens hypertexte EXCEL 2010[EXCEL ou VBA] Chercher une valeur parmi un ensemble de valeur
remplacer une ligne dans un fichier[PHP] Remplacer preg_replace par preg_replace_callback
Accélération d'un ensemble de requêtes via Pdo et préparationVBA sélectionner contenus de plusieurs fichiers excel
Aide:extraire un groupe de données depuis un groupe de fichiersRechercher et remplacer avec une table de correspondance
[Résolu]Excel 2010 - remplacer chaine de caractère dans un fichierRemplacer contenu texte entre 2 balises en batch
Plus de sujets relatifs à : [VB6] Remplacer l'ensemble des contenus des nodes par des CDATA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR