我每天从第三方服务收到2个XML文件,我需要使用VBS将它们组合在一起,因为它是服务器上唯一使用XML的可用技术。每个XML文件都具有相同的结构 -
<section>
<lot>
<number>8</number>
<identifier>au23-zx78a</identifier>
</lot>
<lot>
<number>23</number>
<identifier>au23-zx78a</identifier>
</lot>
...and so on...
</section>
我需要从文件1中取出所有批次节点(包括任何和所有子节点)并将它们插入到文件2中,然后再保存文件2以供其他服务使用。使用VBS。
我搜索了网页,我找到了使用VBS获取节点的方法,但是我将节点放入另一个文件时迷失了方向。我今天已经编写并删除了3或4个脚本,因为我无法正确使用它。
我知道逻辑就是这个 -
加载文件1, 加载文件2, 从文件1中获取批次节点, 循环遍历文件1中的批次节点,并将它们作为文件2中节节点的子节点附加, 保存文件2
有人能指点我正确的方向来帮助我吗?
答案 0 :(得分:1)
这是一种简单的方法:将两个xml文件加载到MSXML2.DomDocument
个对象中,从第一个文档中选择所有lot
个节点,克隆它们并将它们插入到第二个文档中。
option explicit
' collect xml file paths from the command line
dim xmlpath1: xmlpath1 = WScript.Arguments(0)
dim xmlpath2: xmlpath2 = WScript.Arguments(1)
' open up the xml files, this might need some error handling
dim xmldoc1: set xmldoc1 = CreateObject("MSXML2.DomDocument")
xmldoc1.async = false
xmldoc1.load xmlpath1
xmldoc1.setProperty "SelectionLanguage", "XPath"
dim xmldoc2: set xmldoc2 = CreateObject("MSXML2.DomDocument")
xmldoc2.async = false
xmldoc2.load xmlpath2
' get a collection of lot nodes
dim lots: set lots = xmldoc1.selectNodes("/section/lot")
' loop through each lot, clone it and add it to the second document
dim lot
for each lot in lots
dim l: set l = lot.cloneNode(true)
xmldoc2.documentElement.appendChild l
next
' overwrite the second document
xmldoc2.save xmldoc2.url
脚本(如果称为merge-xml.vbs)将从命令行运行
cscript merge-xml.vbs xml1.xml xml2.xml
答案 1 :(得分:0)
只想提供vbscript示例,了解我如何读取无限制的XML文件克隆内容并创建新的XML文件,然后将其读入记录集。即将多个XML文件读入记录集。
Dim xmlDoc,cn,fso,f,xmlDoc2,rs
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set xmlDoc = CreateObject("MSXML2.DOMDocument.3.0")
Set xmlDoc2 = CreateObject("MSXML2.DOMDocument.3.0")
Set fso = CreateObject("Scripting.FileSystemObject")
xmlDoc.async="False"
xmlDoc2.async="False"
xmlDoc2.setProperty "SelectionLanguage","XPath"
' Create a root element in the new merged xml
Set objRoot = xmlDoc.createElement("OutDelData")
xmlDoc.appendChild objRoot
' Loop all xmls in a folder and extract all OutDelData/OutDeliveries
'change the xpath to //* to clone it all
For Each f In
fso.GetFolder("C:\inetpub\wwwroot\HandheldWebService\data\OutDel\ToDeliver").Files
If LCase(fso.GetExtensionName(f))="xml" Then
xmlDoc2.load f.Path
For Each node In xmlDoc2.selectNodes("//OutDelData/OutDeliveries/*")
Set newnode = node.cloneNode(True)
xmlDoc.documentElement.appendChild newnode
Next
End If
Next
' Create new xml header
Set objIntro = xmlDoc.createProcessingInstruction ("xml","version='1.0'")
xmlDoc.insertBefore objIntro,xmlDoc.childNodes(0)
' save the nw merged file
xmlDoc.save "C:\temp\XML\temp.xml"
' Open connection and make use of the data in a data set
cn.Open "Provider=MSDAOSP;Data Source=MSXML2.DSOControl.3.0"
rs.Open "C:\temp\XML\temp.xml",cn,3,3
Debug.WriteLine rs.GetString
rs.Close