こんにちは以下は、私が作業しているサンプルXMLファイル形式です。小さな部分でファイルを分割したいと思います。問題は2子ノード「ヘッダ」と「レコード」があるということであり、私はここで、「ヘッダー」&「フッター」ノードVBAを使用して大きなXMLファイルを小さなものに分割する方法
<PortfolioBulk2_0_RES>
<Header>
<ProviderCode>123</ProviderCode>
<FileID>20170817</FileID>
<NumInputSubjects>23123</NumInputSubjects>
<ChunkID>1</ChunkID>
<RecordMin>1</RecordMin>
<RecordMax>23123</RecordMax>
</Header>
<Record>
<RecordId>1</RecordId>
<ProviderSubjectNo>123456789</ProviderSubjectNo>
<PackageLabel>GOLD</PackageLabel>
<Error>
<No>811</No>
<Description>Subject not found</Description>
</Error>
</Record>
<Record>
<RecordId>2</RecordId>
<ProviderSubjectNo>654789321</ProviderSubjectNo>
<PackageLabel>GOLD</PackageLabel>
<Error>
<No>811</No>
<Description>Subject not found</Description>
</Error>
</Record>
<Footer>
<StartDateTime>2008201712:18:06</StartDateTime>
<StopDateTime>2008201717:19:00</StopDateTime>
<NoIndividualsOK>13185</NoIndividualsOK>
<NoCompaniesOK>546</NoCompaniesOK>
<NoIndividualsError>282</NoIndividualsError>
<NoCompaniesError>20</NoCompaniesError>
<NoUnknownsError>9090</NoUnknownsError>
</Footer>
</PortfolioBulk2_0_RES>
を使用してXMLファイルを保存することができませんVBAで私のコードです。 XML形式で保存された各ファイルでヘッダーとフッターのノードをループする方法を誰かが示唆してくれることを願っています。おかげ
Sub SPLIT()
numFiles = 2 'number of output files
Set src = CreateObject("Msxml2.DOMDocument.6.0")
src.async = False
src.Load "C:\Users\104704\Documents\Office 1\04_Raw Data\09_AECB Bulk\CLI working\01.xml"
Set Nodes = src.SelectNodes("//Record")
numnodes = Nodes.Length \ numFiles 'number of nodes per output file
'MsgBox (numnodes)
Set XML = Nothing
For i = 0 To Nodes.Length - 1
'create a new XML object on the first iteration and every time numNodes
'nodes have been added to the current object
If i Mod numnodes = 0 Then
If Not XML Is Nothing Then
'if we already have an XML object: save it to a file
Set prolog = XML.createProcessingInstruction("xml", "version='1.0'")
XML.InsertBefore prolog, XML.ChildNodes(0)
XML.Save "C:\Users\104704\Documents\Office 1\04_Raw Data\09_AECB Bulk\CLI working\" & (i \ numnodes - 1) & ".xml"
End If
Set XML = CreateObject("Msxml2.DOMDocument.6.0")
Set root = XML.createElement("PortfolioBulk2_0_RES")
XML.appendChild root
End If
root.appendChild Nodes.Item(i)
Next
'save unsaved XML object
If Not XML Is Nothing Then
Set prolog = XML.createProcessingInstruction("xml", "version='1.0'")
XML.InsertBefore prolog, XML.ChildNodes(0)
XML.Save "C:\Users\104704\Documents\Office 1\04_Raw Data\09_AECB Bulk\CLI working\" & (i \ numnodes - 1) & ".xml"
End If
End Sub
「整形」xmlファイルは、XMLを使用して1個のルートタグ、だから、ネットライブラリ内のほとんどのメソッドを持っている唯一のルートタグを可能にします。多くの場合、xmlがログファイルで使用されると、ログメッセージがファイルに追加されるため、ログファイルは整形されていないため、オープンおよびクローズルートタグがないため、ファイルが整形されません。したがって、ファイルに複数のルートタグが含まれるようにするには、StreamWriterを使用してファイルを保存します。 – jdweng
@ O.Cheema、既存のすべてのレコードノードを新しいXMLにエクスポートしますか?もしそうなら、私の答えはどうですか? –