-1

サードパーティのサービスから毎日2つのXMLファイルを受け取りますが、XMLを使用するサーバーで利用できる唯一のテクノロジであるVBSを使用してそれらを組み合わせる必要があります。各XMLファイルの構造は同じです-

<section>
    <lot>
        <number>8</number>
        <identifier>au23-zx78a</identifier>
    </lot>
    <lot>
        <number>23</number>
        <identifier>au23-zx78a</identifier>
    </lot>
    ...and so on...
</section>

別のサービスで使用するためにファイル2を保存する前に、ファイル1からすべてのロットノード(すべての子を含む)を取得してファイル2に挿入する必要があります。VBSを使用します。

Webを検索し、VBSを使用してノードを取り出す方法を見つけましたが、ノードを別のファイルに入れることに迷っています。私はそれを正しく理解することができなかったので、今日3つか4つのスクリプトを書いて廃棄しました。

私は論理がこれであることを知っています-

ファイル1をロードし、ファイル2をロードし、ファイル1からロットノードを取得し、ファイル1からロットノードをループして、ファイル2のセクションノードの子として追加し、ファイル2を保存します。

誰かが私を正しい方向に向けることによって私を助けることができますか?

4

2 に答える 2

1

これを行う簡単な方法は次のとおりです。両方のxmlファイルをMSXML2.DomDocumentオブジェクトにロードlotし、最初のドキュメントからすべてのノードを選択し、それらを複製して2番目のドキュメントに挿入します。

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

于 2012-05-03T11:45:21.770 に答える
0

無制限のXMLファイルを読み取る方法のvbscriptの例を提供したかったのですが、コンテンツのクローンを作成し、新しい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 
于 2017-09-26T09:24:54.897 に答える