tacoman Skrevet 1. august 2008 Del Skrevet 1. august 2008 (endret) Hei, nybegynner med VB skal lage et lite program for å åpne to eller flere .XML-filer fra en mappe, og slå sammen disse til én .XML-fil. Utgangspunktet var at jeg fikk til en funksjon for å slå sammen to eller flere statiske xml-filer, men jeg ønsker å gjøre slik at jeg kan browse etter filer, og bruke funksjonen for å slå sammen disse. Så langt har jeg kommet: Åpner filebrowser, legger til ønskede xml-filer i en ListBox, samt funksjonen for å slå sammen filene. Problemet ligger et sted i telleren som skal sørge for å legge til filene fra ListBox til slå-sammen-funksjonen (Button1_Click). Her er hva jeg har så langt: Public Class Form1 Dim TotalFile As String = "" ' Sub for Open File Dialog to open multiple files Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click Dim OpenFileDialog1 As New OpenFileDialog OpenFileDialog1.Multiselect = True OpenFileDialog1.InitialDirectory = "C:\" OpenFileDialog1.Filter = "XML files (*.xml)|*.xml|All files (*.*)|*.*" OpenFileDialog1.FilterIndex = 2 OpenFileDialog1.RestoreDirectory = True If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then For Each x As String In OpenFileDialog1.FileNames TotalFile = TotalFile & x & Environment.NewLine ListBox1.Items.Add(TotalFile) Next 'MessageBox.Show(TotalFile) End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim doc1 As MSXML2.DOMDocument60 doc1 = New MSXML2.DOMDocument60 doc1.load(ListBox1.Items.Item(0)) For i = 1 To Me.ListBox1.Items.Count - 1 Step 1 Dim doc(i) As MSXML2.DOMDocument60 Dim docNode(i) As MSXML2.IXMLDOMNode doc(i) = New MSXML2.DOMDocument60 doc(i).load(ListBox1.Items.Item(i)) 'Neste linje gir System.NullReferenceException: For Each docNode(i) In doc(i).documentElement.childNodes doc1.documentElement.appendChild(docNode(i)) Next Next i doc1.save("C:\temp\merged.xml") 'MsgBox(doc(i).xml) End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged End Sub End Class Alle forslag mottas med takk, men husk at jeg er rimelig ny på det her, så jeg må ofte ha det inn med te-skje Edit: Det begynner for øvrig å gå opp for meg nå at det muligens har en sammenheng med hva jeg henter fra ListBox1 å gjøre... At det ikke ligger data fra filene som er lastet her, men kun en streng med path og filnavn. Eventuelt så bruker jeg følgende setning i Button1_Click feil: doc(i).load(ListBox1.Items.Item(i)) Hvordan skal jeg laste hver enkelt linje i ListBox1 til doc(i)? Endret 1. august 2008 av tacoman Lenke til kommentar
tacoman Skrevet 1. august 2008 Forfatter Del Skrevet 1. august 2008 (endret) Trodde jeg hadde løst det, men det hadde jeg altså ikke. Problemet ligger i å få lagt inn filene fra OpenFileDialog inn til ListBox1 korrekt. Skjønner ikke hvordan jeg skal få til dette. Har fått til å legge til første valgte fil like mange ganger som antall filer man velger, men skulle jo gjerne fått lagt til hver enkelt fil da... For Each fileName As String In OpenFileDialog1.FileNames ListBox1.Items.Add(OpenFileDialog1.FileName) Hvordan får jeg lagt til alle filene fra OpenFileDialog til ListBox1? Endret 1. august 2008 av tacoman Lenke til kommentar
tacoman Skrevet 1. august 2008 Forfatter Del Skrevet 1. august 2008 Fant ut av det til slutt Fullstendig kode (som funker): Imports System.IO Public Class Form1 Dim TotalFile As String = "" ' Sub for Open File Dialog to open multiple files Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click Dim OpenFileDialog1 As New OpenFileDialog OpenFileDialog1.Multiselect = True OpenFileDialog1.InitialDirectory = "C:\" OpenFileDialog1.Filter = "XML files (*.xml)|*.xml|All files (*.*)|*.*" OpenFileDialog1.FilterIndex = 2 OpenFileDialog1.RestoreDirectory = True If OpenFileDialog1.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then For Each sFile As String In OpenFileDialog1.FileNames Dim pos As Integer = sFile.LastIndexOf("\"c) Me.ListBox1.Items.Add(System.IO.Path.GetFullPath(sFile)) Next End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim doc1 As MSXML2.DOMDocument60 doc1 = New MSXML2.DOMDocument60 doc1.load(ListBox1.Items.Item(0)) For i = 1 To Me.ListBox1.Items.Count - 1 Step 1 Dim doc(i) As MSXML2.DOMDocument60 Dim docNode(i) As MSXML2.IXMLDOMNode doc(i) = New MSXML2.DOMDocument60 doc(i).load(ListBox1.Items.Item(i)) For Each docNode(i) In doc(i).documentElement.childNodes doc1.documentElement.appendChild(docNode(i)) Next Next i doc1.save("C:\temp\merged.xml") End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged End Sub End Class Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå