2014-09-01 4 views
1

В следующем файле XML, используя VBScript я хочу, чтобы добавить узлыИспользование VBScripting Добавить узел в 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> 

После запуска сценария, 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" 

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

ответ

0

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

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

Вот пример, который демонстрирует какую-то технику не распространяется правильно в коде вы пытались, а именно (нулевая проверка пропущено):

  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" 
+0

+1 Можете ли вы поделиться правильный код. как я новый vb – Arun

+0

Хм .. вы можете просто скопировать-вставить этот код, удалить строку .... и запустить – har07