gpt4 book ai didi

xml - 在vbscript中将子条目添加到xml文件中的特定节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:52:20 27 4
gpt4 key购买 nike

我有一个包含此条目的 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)

但是这给出了错误

This name may not contain < character" at " Set NewNode = xmlDoc.createElement(entry)

ElemList.appendChild(NewNode) 也不起作用。

最佳答案

XmlDocument.CreateElement 接受三个参数:节点类型、节点名称和命名空间。在您的示例中,由于您的子元素名为“add”,它是一个元素(type==1),并且是全局 xml 命名空间的一部分,您将调用 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()

...PrettyPrintXml 函数的定义如下:

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>

关于xml - 在vbscript中将子条目添加到xml文件中的特定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328907/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com