2014-09-01 2 views
1

Dans le fichier XML suivant, en utilisant vbscript je veux les nœuds addEn utilisant VBScripting Ajouter nœud à un fichier xml

<?xml version="1.0" encoding="UTF-8"?> 
<Project> 
    <Variable name="Variable_1" /> 
    <Study> 
     <Agent> 
     <Variable name="Variable_1" baseline="0" distribution="" flags="2" max="1" min="0" /> 
     </Agent> 
    </Study> 
</Project> 

Après avoir exécuté le script, le fichier XML sera comme suit.

<?xml version="1.0" encoding="UTF-8"?> 
<Project> 
    <Variable name="Variable_1" /> 
    <Variable name="Variable_2" /> 
    <Variable name="Variable_3" /> 
    <Study> 
     <Agent> 
     <Variable name="Variable_1" baseline="0" distribution="" flags="2" max="1" min="0" /> 
     <Variable name="Variable_2" baseline="4" distribution="" flags="2" max="3" min="1" /> 
     </Agent> 
    </Study> 
</Project> 

J'ai essayé les codes suivants, mais aucun résultat

Set xmlDoc = CreateObject("Microsoft.XMLDOM") 
xmlDoc.Async = "False" 
xmlDoc.Load("us2.xml") 
Dim objCurrNode, objNewNode, objNewText 
Set objRoot = xmlDoc.documentElement 
Set objNewNode = XMLDoc.createElement("VarIable name") 
Set objNewText = XMLDoc.createTextNode("Variable_2") 
objNewNode.appendChild(objNewText) 
xmlDoc.Save "Audits.xml" 

s'il vous plaît suggérer à ce sujet. Merci.

Répondre

0

Vous ne pouvez pas createElement avec des attributs et des valeurs d'attribut ne sont pas des enfants de texte. Utilisez XPath pour rechercher les nœuds du modèle, les cloner et les modifier, puis ajoutez-les au nœud parent approprié. Pour vous aider à démarrer:

Option Explicit 

Dim oXDoc : Set oXDoc = CreateObject("Msxml2.DOMDocument") 
oXDoc.setProperty "SelectionLanguage", "XPath" 
oXDoc.async = False 
oXDoc.load "..\data\25604761.xml" 

If 0 = oXDoc.ParseError Then 
    WScript.Echo oXDoc.documentElement.xml 
    Dim sXPath : sXPath  = "/Project/Variable" 
    Dim ndlFnd : Set ndlFnd = oXDoc.selectNodes(sXPath) 
    If 1 = ndlFnd.length Then 
     Dim ndNew : Set ndNew = ndlFnd(0).cloneNode(True) 
     ndNew.getAttributeNode("name").value = "Variable_2" 
     ndlFnd(0).parentNode.appendChild ndNew 
     WScript.Echo "----------------", vbCrLf & oXDoc.documentElement.xml 
    Else 
     WScript.Echo sXPath, "- not exactly one node found" 
    End If 
Else 
    WScript.Echo oXDoc.ParseError.Reason 
End If 

sortie:

cscript 25604761.vbs 
<Project> 
     <Variable name="Variable_1"/> 
     <Study> 
       <Agent> 
         <Variable name="Variable_1" baseline="0" distribution="" flags="2" 
       </Agent> 
     </Study> 
</Project> 
---------------- 
<Project> 
     <Variable name="Variable_1"/> 
     <Study> 
       <Agent> 
         <Variable name="Variable_1" baseline="0" distribution="" flags="2" 
       </Agent> 
     </Study> 
     <Variable name="Variable_2"/> 
</Project> 
1

Voici un exemple qui illustre une technique ne sont pas couverts correctement dans le code que vous avez essayé, à savoir (null vérification sautée):

  1. Créer un attribut pour un élément,

  2. Ajouter un élément à un nœud parent ,

  3. élément Ajouter après un certain élément existant,

  4. Sélectionnez élément particulier à l'aide Xpath et SelectSingleNode() méthode


Set xmlDoc = CreateObject("Microsoft.XMLDOM") 
xmlDoc.Async = "False" 
xmlDoc.Load("us2.xml") 

Dim variable1, variable2, agent, variable2Agent 
'select <Variable> node having name attribute equals Variable_1' 
Set variable1 = xmlDoc.SelectSingleNode("/Project/Variable[@name='Variable_1']") 
'create new <Variable>' 
Set variable2 = xmlDoc.CreateElement("Variable"); 
'add name="Variable_2" attribute' 
variable2.SetAttribute("name", "Variable_2"); 
'add new <Variable> after variable1 node' 
variable1.ParentNode.InsertAfter(variable2, variable1); 

'select <Agent> node' 
Set agent = xmlDoc.SelectSingleNode("/Project/Study/Agent") 
'create new <Variable> and set all required attributes' 
Set variable2Agent = xmlDoc.CreateElement("Variable") 
variable2Agent.SetAttribute("name", "Variable_2") 
variable2Agent.SetAttribute("baseline", "4") 
.... 
'add new <Variable> after the last child of <Agent> node' 
agent.AppendChild(variable2Agent) 

xmlDoc.Save "Audits.xml" 
+0

+1 Pouvez-vous s'il vous plaît partager le bon code. comme je suis nouveau vb – Arun

+0

Hmm..vous pouvez simplement copier-coller ce code, supprimer la ligne .... et courir – har07

Questions connexes