#1 20. Dezember 2010 xml in Array einlesen Hallo, ich bräuchte kurz eure Hilfe: Mache eine Mitgliederverwaltung mit einer XML Datei. Diese Mitglieder schreibe ich dann in eine Word-Vorlage (dotx). Das habe ich schon hingebracht, jetzt fehlt mir der entscheidende Knackpunkt: Habe eine xml Datei (C:\logs\test.xml) mit folgendem Inhalt: Spoiler Code: <?xml version="1.0" standalone="yes"?> <Mitglieder> <Mitglied> <Nachname>Testnachname1</Nachname> <Vorname>Testvornam1</Vorname> <Geschlecht>Männlich</Geschlecht> </Mitglied> <Mitglied> <Nachname>Testnachname2</Nachname> <Vorname>Testvorname2</Vorname> <Geschlecht>Weiblich</Geschlecht> </Mitglied> <Mitglied> <Nachname>Testnachname3</Nachname> <Vorname>Testvorname3</Vorname> <Geschlecht>Männlich</Geschlecht> </Mitglied> </Mitglieder> Ich habe nun folgenden Code: Spoiler Code: Dim i As Integer Dim XMLDatei As XDocument = XDocument.Load("C:\logs\test.xml") Dim mitglied As String Dim Mitglieder As New Dictionary(Of Integer, String) Mitglieder.Add(1, "Item1") Mitglieder.Add(2, "Item2") For i = 1 To 39 Step 1 mitglied = "Tm_Mitglied" & i If WordAppl.ActiveDocument.Bookmarks.Exists(mitglied) Then WordAppl.ActiveDocument.Bookmarks(mitglied).Range.Text = Mitglieder(i) End If Next i Mein Denkansatz ist wie folgt: Der Array "Mitglieder" muss jetzt so lange mit Mitglied.Vorname & Mitglied.Nachname aufgefüllt werden, bis die Datei zu Ende ist. Die Schleife geht deshalb bis 40, weil ich insgesamt 40 Textmarken in meiner Word-Vorlage verwenden kann. Konkret habe ich es mir so vorgestellt: Mitglieder.Add(1, "Testnachname1 Testvornam1") Mitglieder.Add(2, "Testnachname2 Testvornam2") Das ich eine Schleife benötige ist mir klar. Was mir nicht klar ist, wie lese ich die XML so wie oben gewünscht aus? Könntet Ihr mir auf die Sprünge helfen? Dann hätte ich nämlich das Programm funktionierend und muss "nur noch" das MakeUp machen. Bin ein Anfänger und arbeite mit Visual Studio Express 2010. Bewertung ist natürlich drin. Grüße + Multi-Zitat Zitieren
#2 20. Dezember 2010 AW: xml in Array einlesen Hallo Estorado, anstatt mit XmlDocument zu arbeiten, würde ich an Deiner Stelle mit einem DataSet arbeiten. Code: DataSet.ReadXml ist dann das Stichwort. Im DataSet befinden sich eine oder mehrere Tabellen. In Deiner Beispieldatei sehe ich eine Tabelle (Mitglied). Willst Du nun den Nachnamen des zweiten Datensatzes auslesen, würde ich das so machen: Code: Dim dateiPfad As String = "C:\Test\mitglieder.xml" Dim ds As DataSet Dim mitglieder As DataTable Dim mitglied As DataRow Dim nachname As String ds = DataSet.ReadXml(dateiPfad) mitglieder = ds.Tables("Mitglied") mitglied = mitgliederTabelle.Rows(1) nachmame = mitglied("Nachname") Achtung: Der Code ist nicht getestet ! Hoffe das hilft. BG MaxDev + Multi-Zitat Zitieren
#3 21. Dezember 2010 AW: xml in Array einlesen finde die lösung n bissl haarsträubig @MaxDev, einfacher würde ich es so emfpinden: Code: ds.Tables("Mitglied").Rows(1)("Nachname") bzw. ds.Tables(0).Rows(1)("Nachname") du kannst anstatt "Nachname" in den Klammern auch einfach deinen Index eingeben also: 0,1,2 0= Nachname 1= Vorname 2= Geschlecht falls du dir nun einfach alle Werte auslesen lassen möchtest und adden willst (wohin auch immer), von deiner XML datei dann hier mal ohne Fehlerhandling: Code: for i as Integer = 0 to ds.Tables("Mitglied").rows.count -1 step +1 Zuweisung = ds.Tables(0).Rows(i)("Nachname") Zuweisung = ds.Tables(0).Rows(i)("Vorname") Zuweisung = ds.Tables(0).Rows(i)("Geschlecht") next mfg whenyou + Multi-Zitat Zitieren
#4 21. Dezember 2010 AW: xml in Array einlesen Danke für die beiden tollen Hinweise! Hat mir sehr geholfen. Habe es nun so hingebracht: Ich lese direkt das DataSet Mitglieder, nicht die xml Datei, diese muss vorher ins DataSet geladen werden. So finde ich es viel leichter. Wenn noch wer Verbesserungen hat kann mir ja per PM schreiben. Soweit ist dann dicht hier. BWs sind draußen. Code: Dim arMitglieder As New Dictionary(Of Integer, String) Dim dsMitglieder As DataSet Dim varmitglied As String Dim varNachname As String Dim varVorname As String Dim varNachundVorname As String dsMitglieder = Mitglieder 'Dim i As Integer For i As Integer = 0 To dsMitglieder.Tables("Mitglied").Rows.Count - 1 'Step +1 varmitglied = "Tm_Mitglied" & i varNachname = dsMitglieder.Tables(0).Rows(i)("Nachname") varVorname = dsMitglieder.Tables(0).Rows(i)("Vorname") varNachundVorname = varNachname & varVorname arMitglieder.Add(i, varNachundVorname) If WordAppl.ActiveDocument.Bookmarks.Exists(varmitglied) Then WordAppl.ActiveDocument.Bookmarks(varmitglied).Range.Text = arMitglieder(i) End If Next i --- Post vom 30.12.2010 Entschuldigt, dass ich das Thema nochmal aufreiße und auch gleich noch einen Doppelpost drauflege, habe aber nochmal eine Frage: Kann man auf das Dataset auch eine Art Filter legen, dass nur die Mitglieder kommen, die das Geschlecht männlich haben? Hier nochmal mein Code, das Dataset heißt "Mitglieder" und die Tabelle "Mitglied". Da gibts 3 Spalten: Nachname, Vorname, Geschlecht. Nach und Vorname sollen ausgegeben werden, jedoch nur die, die Geschlecht männlich haben. Code: For i As Integer = 0 To dsMitglieder.Tables("Mitglied").Rows.Count - 1 'Step +1 varmitglied = "TM_Mitglied" & i varNachundVorname = dsMitglieder.Tables(0).Rows(i)("Nachname") & " " & dsMitglieder.Tables(0).Rows(i)("Vorname") arMitglieder.Add(i, varNachundVorname) If WordAppl.ActiveDocument.Bookmarks.Exists(varmitglied) Then WordAppl.ActiveDocument.Bookmarks(varmitglied).Range.Text = arMitglieder(i) End If Next i + Multi-Zitat Zitieren
#5 30. Dezember 2010 AW: xml in Array einlesen geht definitiv, kann aber kein vb ^^ sind einfach nur select-statements die man da formuliert und an die db sendet.. "SELECT * FROM mitglieder WHERE mitglied.geschlecht = männlich" oder so ähnlich, weiß nicht wie deine db/dataset im einzelnen aussieht und die sql-syntax am besten nochmal genau nachgucken oder erklären lassen ^^ möglich ist es auf jeden fall. Galileo Computing :: Einstieg in Visual Basic 2010 + Multi-Zitat Zitieren
#6 30. Dezember 2010 AW: xml in Array einlesen Hallo Estorado, die Funktion Select sollte Dir helfen, die ist an der DataTable. Die nimmt einen Ausdruck (Expression) entgegen, mit dem in der Tabelle gefiltert werden kann. DataTable.Select-Methode (String) (System.Data) Die Expressions unterstützen die gängigen Operatoren aus SQL (=, LIKE, >, <, <>, usw). DataColumn.Expression Property (System.Data) Code: deinDataSet.Tables("Mitglied").Select("Geschlecht = 'männlich'") Du bekommst dann ein Array mit den Rows zurück, an dem die Bedingung stimmt. Viel erfolg BG MaxDev + Multi-Zitat Zitieren
#7 21. Januar 2011 AW: xml in Array einlesen Hallo MaxDev, vielen Dank für die Antwort. Was ich nicht verstehe: Ich bekomme durch das verwenden der Select Funktion eine eindimensionalen Array zurück. Irgendwie kann ich aber diesen Array nicht weiterverwenden. Ich weiß nicht genau wo ich das select platzieren muss oder wie ich es einbauen/umbauen muss: Code: 'Variablen deklarieren Dim arMitglieder As New Dictionary(Of Integer, String) Dim dsMitglieder As DataSet Dim varNachundVorname As String 'DateSet zuweisen dsMitglieder = Mitglieder 'Schleife, aus DataSet auslesen For i As Integer = 0 To dsMitglieder.Tables("Mitglied").Rows.Count - 1 'Funktioniert nicht varNachundVorname = dsMitglieder.Tables(0).Select("männlich").Rows(i)("Nachname") & " " & dsMitglieder.Tables(0).Select("männlich").Rows(i)("Vorname") 'Bringt alle varNachundVorname = dsMitglieder.Tables(0).Rows(i)("Nachname") & " " & dsMitglieder.Tables(0).Rows(i)("Vorname") 'Dict füllen arMitglieder.Add(i, varNachundVorname) Habe lange darüber nachgedacht, aber mir fällt nichts ein wie ich das anders lösen könnte? Eventuell hat noch jemand einen Tipp. Grüße Estorado P.S. Schade dass das Board kein vb.net Syntax kann... + Multi-Zitat Zitieren
#8 21. Januar 2011 AW: xml in Array einlesen Hallo Estorado, Du machst erst das Select auf die Tabelle. Dabei gibst Du einen Spaltennamen aus der Tabelle und den gewünschten Wert in der Tabelle an. Zum Beispiel: Code: deinDataSet.Tables("Mitglied").Select("Geschlecht = 'männlich'") In einem Code, der Deinem ähnlich ist, könnte das so aussehen: Code: Const DATEINAME As String = "C:\_Test\meinDataSet.xml" ' Variablen deklarieren Dim dsMitglieder As DataSet Dim vorname As String Dim nachname As String Dim geschlecht As String ' DataSet einlesen dsMitglieder = New DataSet dsMitglieder.ReadXml(DATEINAME) ' Zeilen auslesen, die Du haben willst Dim rowsMaenner As DataRow() rowsMaenner = dsMitglieder.Tables("Mitglied").Select("Geschlecht = 'männlich'") ' Jede Zeile einzeln "bearbeiten" ' Hier erhälst Du alle Zeilen, bei denen "Geschlecht = 'männlich'" zutrift For Each rowMann As DataRow In rowsMaenner ' Vorname auslesen vorname = rowMann("Vorname") ' Nachname auslesen nachname = rowMann("Nachname") ' Geschlecht auslesen ' (macht wenig Sinn, da aufgrund der Select-Bedingung immer 'männlich' ausgelesen wird geschlecht = rowMann("Geschlecht") Next In dem Beispiel ist "Geschlecht" der Name einer Spalte in der DataTable. "männlich" ist der Wert, den die Spalte enthalten muss, damit die Zeile (im Array von DataRows) zurückgegeben wird. Hoffe das hilft. BG MaxDev + Multi-Zitat Zitieren
#9 21. Januar 2011 AW: xml in Array einlesen Hallo MaxDev, Knoten geplatzt! Vielen Dank, es funktioniert. Muss jetzt über deinen Code wahrscheinlich noch eine Nacht schlafen, dann hab ich dein vorgehen gecheckt :] Viele Grüße und Danke für die Hilfe. BW kommt sobald ich wieder andere bewertet habe. + Multi-Zitat Zitieren