VB.NET Mehrere XML Dateien Filtern mit Linq To XML aus einem Ordner nach Parameter

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    VB.NET Mehrere XML Dateien Filtern mit Linq To XML aus einem Ordner nach Parameter

    Hallo Zusammen,

    Ich möchte aus einem Ordner wo mehrere XML Dateien abgelegt sind,
    mit LINQ To XML oder andere möglichkeit über einen gesamten Ordner XML Dateien Filtern.

    In den XML Dateien sind mehrere Parameter:
    InternID und InternName über die ich gerne alle XML Dateien filtern möchte!

    Danke

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Guten Morgen,

    Ja VB.NET Code ist fertig.
    Aktueller Status ist:
    Die XML Dateien werden über Klassen.Serialisierung automatisch erstellt
    und können auch automatisch wieder in die Klassen geladen werden.

    Aktuelle habe ich das so das ich jede XML Datei im Pfad Laden muss um dann die
    2 XML Knoten = InternID und InternName über LINQ To XML abfragen zu können.

    Bei 10 Dateien habe ich keine Probleme, aber wenn ich jetzt mal 30.000 XML Dateien habe dann dauert das schon etwas länger.

    Was ich erreichen will ist diese 2 XML Knoten schon vorab zu filtern und nicht mehr 30.000 sondern z.B. nur noch 100 XML Dateien

    Also eine Art Indexierung auf die XML Dateien die in diesem Ordner liegen!

    Danke

    Mfg
    Um aber an die Knoten zu kommen, wirst du die 30.000 Dateien auch öffnen und lesen/serialisieren müssen.
    Hier würde sich

    Quellcode

    1. Parallel.ForEach
    anbieten.
    Achte dabei darauf, dass die Xml Dateien wenn möglich in einer

    Quellcode

    1. System.Collections.Concurrent.ConcurrentBag
    liegen.

    Quellcode

    1. List (Of)
    sollte auch gehen, ist ab er für den parallelen Betrieb nur lesend zu gebrauchen.

    Wie groß sind denn die Xml Dateien, wie lange dauert das Einlesen pro Datei in ms?
    Zum Thema Linq to Xml gibts bei Microsoft einige brauchbare Beispiele learn.microsoft.com/en-us/dotn…rd/linq/linq-xml-overview

    Hilfreich wäre auch dein Xml Serialisier Code, die Klassen und eine Xml Datei (anonymisiert, falls Kundendaten drin sind) als Beispiel, damit man was zum Testen hat.

    Entwickler schrieb:

    Bei 10 Dateien habe ich keine Probleme, aber wenn ich jetzt mal 30.000 XML Dateien habe dann dauert das schon etwas länger.

    Was ich erreichen will ist diese 2 XML Knoten schon vorab zu filtern und nicht mehr 30.000 sondern z.B. nur noch 100 XML Dateien

    Also eine Art Indexierung auf die XML Dateien die in diesem Ordner liegen!
    Sowas erinnert mich stark an Dokumentenmanager. Die können meist zwar mehr als nur die Verfolgung von Dokumenten, aber die stehen in diesem Punkt vor demselben Problem.

    Da wird zu jedem Dokument ein Datenbankeintrag erzeugt. Der speichert dann nur Informationen nach denen man Dokumente unterscheiden möchte (in diesem Fall deine InternID und InternName) und natürlich den Ablageort.
    Muss aber keine Datenbank sein kann man auch selbst basteln, aber wenn man schon eine Datenbank hat bietet es sich an, performanter als damit geht es nicht.
    Grob gesagt ist es nichts Anderes als eine informationsminimierte Kopie aller Dateien.

    Jede Datei aufmachen und gucken was drin steht, ist bei 30.000 Käse.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Hallo Zusammen,

    Danke für die Antworten, werde mir das am WE anschauen und mich rückmelden.
    Aktuell ist nicht angedacht eine DB zu nutzen.

    Ich kann mir vorstellen eine Art XML Logdatei parallel mitzuführen,
    wo dann über LINQ To XML der XML Dateiname und andere Parameter vorhanden sind.

    Entwickler schrieb:

    Aktuell ist nicht angedacht eine DB zu nutzen.
    Du kannst die Daten auch woanders halten.
    Um einen Offline-Scan kommst du nicht herum, wenn du nicht jedes Mal alle Dateien komplett durchnudeln willst.
    Eventuell kannst du die Daten auch im Dateinamen unterbringen.
    Oder als Extended File Attribute.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --