将子项添加到vbscipt中xml文件中的特定节点

将子项添加到vbscipt中xml文件中的特定节点,xml,vbscript,msxml,Xml,Vbscript,Msxml,我有一个包含此条目的xml文件DataConfiguration.xml <DataSource> <localdata> <add context="Localization"> <parameter name="timeout" type="int" defaultvalue="60"/> <parameter name="address" type="string" defaultvalue="19

我有一个包含此条目的xml文件DataConfiguration.xml

<DataSource>
 <localdata>
    <add context="Localization">
       <parameter name="timeout" type="int" defaultvalue="60"/>
       <parameter name="address" type="string" defaultvalue="192.168.9.45" />
       <parameter name="port" type="int" defaultvalue="6789"/>
    </add>
</localdata>
</DataSource>

我需要在“localdata”中添加另一个条目,以便

 <DataSource>
     <localdata>
        <add context="Localization">
           <parameter name="timeout" type="int" defaultvalue="60"/>
           <parameter name="address" type="string" defaultvalue="192.168.9.45" />
           <parameter name="port" type="int" defaultvalue="6789"/>
        </add>
       <add context="General">
           <parameter name="timeout" type="int" defaultvalue="60"/>
           <parameter name="address" type="string" defaultvalue="192.168.9.478" />
           <parameter name="port" type="int" defaultvalue="5674"/>
        </add>
    </localdata>
    </DataSource>

如何将此添加到vbscript中

我当前的代码

'created xml file object
Set xmlDoc = CreateObject("Msxml2.DOMDocument")

xmlDoc.async = False  
xmlDoc.preserveWhiteSpace= True 
xmlDoc.load("DataConfiguration.xml")

Dim entry

entry = "<add context=""General"">" & _
               <parameter name=""timeout"" type=""int"" defaultvalue=""60""/>" & _ 
               <parameter name=""address"" type=""string"" defaultvalue=""192.168.9.478"" />" & _
               <parameter name=""port"" type=""int"" defaultvalue=""5674""/>"& _
            </add>"

Set NewNode = xmlDoc.createElement(entry)
Set ElemList = xmlDoc.getElementsByTagName("localdata")
ElemList.appendChild(NewNode)
“创建的xml文件对象”
设置xmlDoc=CreateObject(“Msxml2.DOMDocument”)
xmlDoc.async=False
xmlDoc.preserveWhiteSpace=True
load(“DataConfiguration.xml”)
昏暗的入口
条目=“和”_
" & _ 
" & _
"& _
"
Set NewNode=xmlDoc.createElement(条目)
Set ElemList=xmlDoc.getElementsByTagName(“localdata”)
ElemList.appendChild(新节点)
但这给了错误

此名称不能包含
此外,ElemList.appendChild(NewNode)也不起作用。

xmlDoc.CreateElement(1,“add”,“”)

这将为您提供一个空元素。要插入所需的数据(属性
Context=“General”
和所有子元素),需要连续调用DOM操纵方法,添加每个子元素、每个属性,等等。相当辛苦

但是您已经将xml片段作为字符串。因此,与使用DOM方法创建元素不同,您可以创建第二个XmlDocument并告诉它从字符串中获取内容。然后从第二个文档中获取documentElement。然后在第一个文档中的相应节点上调用appendChild,从第二个文档传递documentElement

大概是这样的:

Function GetElementFromXmlString(xmlString)
    Dim doc
    set doc = CreateObject("Msxml2.DOMDocument.6.0")
    doc.async = False
    doc.preserveWhiteSpace= False
    doc.loadXML(xmlString)
    Set GetElementFromXmlString = doc.documentElement
End Function

Sub Main()
    Set doc1 = CreateObject("Msxml2.DOMDocument.6.0")
    doc1.async = False
    doc1.preserveWhiteSpace= False ' True
    doc1.load("DataConfiguration.xml")

    ' generate an Element from an XML string
    Dim xmlString
    xmlString = "<add context=""General"">" & _
                  " <parameter name=""timeout"" type=""int"" defaultvalue=""60""/>" & _
                  " <parameter name=""address"" type=""string"" defaultvalue=""192.168.9.478"" />" & _
                  " <parameter name=""port"" type=""int"" defaultvalue=""5674""/>"& _
              "</add>"
    Dim newElt
    Set newElt = GetElementFromXmlString(xmlString)

    ' get the first child node of type=Element under the document root element in
    ' doc1.  This is not the same as  doc1.documentElement.firstChild.  There can
    ' be text nodes, etc.
    Dim node1
    Set node1 = doc1.documentElement.selectSingleNode("./*[position()=1]")

    ' append the element to the node
    node1.appendChild(newElt)

    WScript.echo (PrettyPrintXml (doc1))
End Sub

Main()
Function PrettyPrintXml(xmldoc)
    Dim reader
    set reader = CreateObject("Msxml2.SAXXMLReader.6.0")
    Dim writer
    set writer = CreateObject("Msxml2.MXXMLWriter.6.0")
    writer.indent = True
    writer.omitXMLDeclaration = True
    reader.contentHandler = writer
    reader.putProperty "http://xml.org/sax/properties/lexical-handler", writer
    reader.parse(xmldoc)
    PrettyPrintXml = writer.output
End Function
对我来说,这项研究的结果是:

<DataSource>
  <localdata>
    <add context="Localization">
      <parameter name="timeout" type="int" defaultvalue="60"/>
      <parameter name="address" type="string" defaultvalue="192.168.9.45"/>
      <parameter name="port" type="int" defaultvalue="6789"/>
    </add>
    <add context="General">
      <parameter name="timeout" type="int" defaultvalue="60"/>
      <parameter name="address" type="string" defaultvalue="192.168.9.478"/>
      <parameter name="port" type="int" defaultvalue="5674"/>
    </add>
  </localdata>
</DataSource>


谢谢我调试了这段代码,GetElementFromXmlString对于一个有效的xmlString来说也算不了什么。很抱歉,我的错误是,第二个参数是这样的。属性之间需要有空格。