2008-09-26 10 views
6

Gibt es einen Rahmen für die Abfrage von XML-SQL-Syntax, ermüde ich ernsthaft von Knotenlisten durchlaufen. Abfragen von XML wie SQL?


Oder ist das nur Wunschdenken (wenn nicht idiotisch) und sicherlich nicht möglich, da XML keine relationale Datenbank ist?

Antwort

13

XQuery und XPath ... XQuery ist mehr, was Sie suchen, wenn eine SQL-Struktur wünschenswert ist.

+0

Cool, ich habe XPath verwendet, weil es in PHP simpleXML implementiert ist, ich denke, ich habe gerade XQuery verpasst. –

+0

Xquery implementiert XPath, aber es ist die Arbeit des Teufels. – Tarski

2

. NET Framework bietet LINQ dies zu tun oder Sie können den .Net System.Data-Namespace verwenden, um Daten aus XML-Dateien zu laden.

Sie können sogar Abfragen erstellen, die haben unter den Tabellen verknüpft usw.

Zum Beispiel stellt System.Data.DataTable eine ReadXml() Methode.

2

Sie könnten LINQ zu XML versuchen, aber es ist nicht sprachunabhängig.

+0

Noch ist es in SQL glaube ich? – Meff

+0

Der LINQ-Teil ist .net, so dass Sie jede Sprache mit einem CLR-Compiler verwenden können. –

1

XQuery ist eine funktionale Sprache, die SQL am nächsten kommt. XPath ist eine Notation zum Lokalisieren eines Knotens innerhalb des Dokuments, der als Teil von XSLT und XQuery verwendet wird.

XML-Datenbanken wie MarkLogic dienen als XQuery-Engines für XML-Daten, ähnlich wie relationale Datenbanken als SQL-Engines für relationale Daten dienen.

+0

SQL-Server und Oracle unterstützen auch XQuery. – tuinstoel

0

XQuery ist sicherlich der Weg nach vorne. Dies wird von XML-Datenbanken wie eXist und MarkLogic verwendet.

In der Java-Welt gibt es mehrere Lösungen für die auf flachen Dateien XQuery laufen, vor allem Saxon

Für .NET ist es nicht so viel zur Verfügung. Microsoft hatte eine XQuery-Bibliothek, obwohl diese aus .NET 2 stammt und nie wieder aufgetaucht ist. XQSharp ist eine native .NET-Alternative, obwohl derzeit nur eine Befehlszeilenversion veröffentlicht wurde.

1

Das hängt von dem Problem ab, das Sie lösen. Wenn die XML-Datei ziemlich groß ist, ist es manchmal notwendig, so etwas wie SAX-Parser zu verwenden, um die Datei Knoten für Knoten zu durchlaufen, oder Sie erhalten OutOfMemoryException oder sogar den virtuellen Speicher auf Ihrem Computer.

Aber, wenn die erwartete Größe der XML-Datei relativ klein ist, können Sie einfach so etwas wie Linq verwenden, auch meine sehen answer - hier habe ich versucht zu erklären, wie durch die Knoten durchqueren viel einfacher, mit Konstruktionen wie Ertrag Rückkehr zu machen.

+0

Ich stieß gerade auf ein ähnliches Problem, ich habe MSXML6 lesen in 300-Megabyte-XML-Dateien und verwenden mehr Gigabyte RAM. Glücklicherweise funktionierte das mit win2k und ich hatte nur ein paar Probleme mit VMs mit extrem kleinen Seitendateien. Ich denke, Rendite Rückkehr würde funktionieren, aber leider bin ich ein Delphi-Programmierer und SOL für alle .NET-Hitze. –