Использование VBScripting Добавить узел в файл xml

В следующем файле XML, используя vbscript, я хочу добавить узлы

<?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>

После запуска скрипта файл xml будет выглядеть следующим образом.

<?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>

Я пробовал следующие коды, но безрезультатно

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"  

пожалуйста, предложите по этому поводу. Спасибо.


person Arun    schedule 01.09.2014    source источник


Ответы (2)


Вот пример, который демонстрирует некоторый метод, который не был правильно реализован в испробованном вами коде, а именно (проверка нулевого значения пропущена):

  1. Создать атрибут для элемента,

  2. Добавить элемент в родительский узел,

  3. Добавить элемент после определенного существующего элемента,

  4. Выберите конкретный элемент, используя метод Xpath и SelectSingleNode()


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" 
person har07    schedule 01.09.2014
comment
+1 Не могли бы вы поделиться правильным кодом. как я новый vb - person Arun; 01.09.2014

Вы не можете createElement с атрибутами, а значения атрибутов не являются текстовыми дочерними элементами. Используйте XPath, чтобы найти узлы модели, клонировать и изменить их, а затем добавить их к правильному родительскому узлу. Для начала:

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

выход:

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>
person Ekkehard.Horner    schedule 01.09.2014