3 Stimmen

C#, XML-Abfrage Frage

Ich habe tonnenweise XML-Dateien, die alle dasselbe XML-Dokument enthalten, aber unterschiedliche Werte haben. Die Struktur ist jedoch bei jeder Datei gleich.

In dieser Datei habe ich ein Datetime-Feld.

Wie lassen sich diese XML-Dateien am besten und effizientesten abfragen? So kann ich zum Beispiel abrufen... Alle Dateien, bei denen das datetime-Feld das heutige Datum ist?

Ich bin mit C# und .net v2. sollte ich XML-Objekte verwenden, um dies zu erreichen oder Text in Datei-Suchroutinen?

Einige Code-Beispiele wären toll... oder nur die allgemeine Theorie, alles würde helfen, danke...

2voto

Lucero Punkte 57715

Dies hängt von der Größe dieser Dateien ab und davon, wie komplex die Daten tatsächlich sind. Soweit ich die Frage verstehe, ist es bei dieser Art von XML-Daten am besten, eine XPath-Abfrage zu verwenden und alle Dateien zu durchsuchen, wobei die Dateien möglicherweise zwischengespeichert werden, um den Parsing-Overhead zu verringern.

Werfen Sie einen Blick darauf: XPathDocument, XmlDocument-Klassen und XPath-Abfragen

http://support.microsoft.com/kb/317069

So etwas sollte möglich sein (wurde aber nicht getestet):

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
// if required, add your namespace prefixes here to nsmgr
XPathExpression expression = XPathExpression.Compile("//element[@date='20090101']", nsmgr); // your query as XPath
foreach (string fileName in Directory.GetFiles("PathToXmlFiles", "*.xml")) {
    XPathDocument doc;
    using (XmlTextReader reader = new XmlTextReader(fileName, nsmgr.NameTable)) {
        doc = new XPathDocument(reader);
    }
    if (doc.CreateNavigator().SelectSingleNode(expression) != null) {
        // matching document found
    }
}

Hinweis: Sie können ein XPathDocument zwar auch direkt aus einem URI/Pfad laden, aber die Verwendung des Readers stellt sicher, dass dieselbe Nametabelle verwendet wird, die auch zum Kompilieren der XPath-Abfrage verwendet wurde. Wenn eine andere Nametabelle verwendet wird, erhalten Sie keine Ergebnisse aus der Abfrage.

1voto

Sarah Vessels Punkte 29404

Sie könnten sich überlegen, ob Sie XSL-Abfragen . Siehe auch XSLT-Tutorial , XML-Transformation mit Xslt in C# , Abfrage von XML mit einem XPath-Ausdruck unter Verwendung von Visual C# .

Diese Frage bezieht sich auch auf eine andere Frage auf Stack Overflow: Parsen mehrerer XML-Dateien mit ASP.NET (C#) und Rückgabe derjenigen mit einem bestimmten Element . Die akzeptierte Antwort dort schlägt jedoch die Verwendung von Linq vor.

1voto

Rik Punkte 27644

Wenn es überhaupt möglich ist, auf C# 3.0 / .NET 3.5 umzusteigen, wäre LINQ-to-XML bei weitem die einfachste Option.

Mit .NET 2.0 müssen Sie sich entweder mit XML-Objekten oder XSL begnügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X