Freitag, 1. August 2008

XML, XSL, XPath

Ich bearbeite gerade mein erstes Datenbankprojekt, das XML beinhaltet. Sehr spannend.

Ziel soll es sein, eine WHERE Klausel für einen SQL-String als XML-Dokument zu erstellen, dieses in einem TreeView-Steuerelement darzustellen und später die Klausel aus dem XML-File zu generieren.
Als schwierig stellt sich momentan heraus, in dem Treeview nur bestimmte Elemente des XML-Files darzustellen. Logischwerweise möchte ich in dem TreeView nur für Endanwender angenehm zu lesende Kriterien wie "Geburtsdatum größer gleich 1.1.1980" stehen haben anstatt tblKandidaten.DOB >= '#1980-01-01'.
Das XML-File enthält also für Klauseln (Verknüpfung der darunterliegenden Elemente mit AND oder OR) und die Kriterien ([Tabelle].[Feld] [operator] [Wert]) jeweils 2 Felder: Anzeigetext und SQL-Code. Angezeigt werden soll logischerweise nur der Anzeigetext.

Das gestaltet sich gar nicht so einfach, wie es sich möglichwerweise anhört. Seit dem MSXML3 gibt es die Möglichkeit XPath auf das Dokument anzuwenden, quasi eine Abfragesprache für das Dokument. Das Ergebnis ist allerdings eine flache Liste, die Hierarchie ist dahin. Man müsste also rekursiv jede Ebene einzeln nach den gesuchen Elementen abfragen und das TreeView füllen.

Hat bisher noch nicht geklappt, diverse kleine Stolpersteine verhindern den Erfolg.
Eine wietere Möglichkeit, die sich nach Lektüre diverser Internetseiten aufgetan hat, ist das XML-Dokument mithilfe von XSLT in eine weiteres XML-Dokument zu transformieren, dass nur die gewünschten Elemente enthält und damit ganz einfach angezeigt werden kann.

eine Lösung steht noch an. Der usenet-thread zu dem Thema ist hier zu finden.