Start
Unternehmen
ERP / PPS / Prozesse
Business Intelligence
Server-Technologien
Software-Technologien
Technologie-Beratung
Individual-Software
Produkte

Übersicht

Comelio GmbH
Rellinghauser Straße 10
D-45128 Essen
Deutschland
Fon: +49(0)201-437517-0
Fax: +49(0)201-437517-10
info@comelio.com

Comelio GmbH
Goethestraße 34
D-13086 Berlin
Deutschland
Fon: +49(0)30-3640339-80
Fax: +49(0)30-3640339-89
info@comelio.com

Comelio GmbH (Ecos)
Glockengießerwall 17
D-20095 Hamburg
Deutschland
info@comelio.com

Comelio GmbH (Ecos)
Mainzer Landstraße 27-31
D-60329 Frankfurt
Deutschland
info@comelio.com

Comelio GmbH (Ecos)
Stiglmaierplatz/Dachauer Str. 37
D-80335 München
Deutschland
info@comelio.com

Comelio GmbH (Ecos)
Liebknechtstr. 33
D-70565 Stuttgart
Deutschland
info@comelio.com

Comelio GmbH
Nevinghoff 16
D-48147 Münster
Deutschland

Comelio GmbH
Friedrich - List - Platz 1
D-04103 Leipzig
Deutschland

Comelio GmbH
St. Johanner Strasse 41-43
D-66111 Saarbrücken
Deutschland

Comelio GmbH
Kaiser-Wilhem-Ring 27–29
D-50672 Köln
Deutschland

Comelio GmbH
Münsterstraße 248
D-40470 Düsseldorf
Deutschland

Comelio GmbH
Fürther Strasse
D-90429 Nürnberg
Deutschland

Comelio GmbH
Parkallee 117
D-28209 Bremen
Deutschland

Comelio-Blog > MS SQL Server > XML mit XPath zerlegen

XML mit XPath zerlegen

Komplexe Zerlegung mit XPath

Sobald man keine eigene Entscheidung über das XML-Format treffen kann, die angeliefer-ten Daten tief verschachtelt sind und fast gar nicht den benötigten relationalen Strukturen entsprechen, genügt die einfache Zuordnung nicht mehr und man muss auf die Möglichkeit zurückgreifen, die genaue Zuordnung mit Hilfe von XPath-Ausdrücken auszuführen. Das in der nächsten Abfrage erzeugte XML-Dokument bietet einen solchen komplexen Aufbau. Innerhalb der sich wiederholenden Product-Elemente gibt es ein Attribut für die Produkt-nummer, ein Kind-Element für den Namen mit einem Textknoten sowie zwei weitere Kin-der, die selbst wieder Kinder für Preis- und Detailinformationen besitzen.

<Product-List>
<Product ProductNumber="BK-R19B-52">
<Name>Road-750 Black, 52</Name>
<Prices>
<Standard>343.6496</Standard>
<List>539.9900</List>
</Prices>
<Details>
<Size>52</Size>
<Color>Black</Color>
</Details>
</Product>
</Product-List>

Kontakt

Anrede* Herr Frau
Vorname*
Nachname*
Firma
E-Mail*
Tel-Nr.
Bereich*
Freitext

Komplexe Zerlegung mit XPath

Sobald man keine eigene Entscheidung über das XML-Format treffen kann, die angeliefer-ten Daten tief verschachtelt sind und fast gar nicht den benötigten relationalen Strukturen entsprechen, genügt die einfache Zuordnung nicht mehr und man muss auf die Möglichkeit zurückgreifen, die genaue Zuordnung mit Hilfe von XPath-Ausdrücken auszuführen. Das in der nächsten Abfrage erzeugte XML-Dokument bietet einen solchen komplexen Aufbau. Innerhalb der sich wiederholenden Product-Elemente gibt es ein Attribut für die Produkt-nummer, ein Kind-Element für den Namen mit einem Textknoten sowie zwei weitere Kin-der, die selbst wieder Kinder für Preis- und Detailinformationen besitzen.

<Product-List>
<Product ProductNumber="BK-R19B-52">
<Name>Road-750 Black, 52</Name>
<Prices>
<Standard>343.6496</Standard>
<List>539.9900</List>
</Prices>
<Details>
<Size>52</Size>
<Color>Black</Color>
</Details>
</Product>
</Product-List>

Bei einer Zerlegung in XML ist es normalerweise so, dass die Blätter des XML-Baums zu Spalten werden sollen. Das nachfolgende Beispiel zeigt also, wie die Daten abgerufen werden. Dies geschieht mit Hilfe des PATH-Modus und den Spaltennamen, welche die Struktur der Verschachtelung angeben.

Die Zerlegung erfolgt dann zwar wiederum innerhalb der OPENXML-Anweisung, wobei hier allerdings zusätzlich noch nach den Datentypen, die für die einzelne erzeugte Spalte verwendet werden sollen, auch noch ein XPath-Ausdruck folgt, der relativ zum vorher ausgewählten Knoten weitere Knoten auswählt. Der Ausdruck ist dabei relativ zu den Knoten, die im XPath-Ausdruck in der OPENXML-Anweisung ausgewählt werden. Im aktuellen Beispiel sind dies wie zuvor die einzelnen Product-Elemente. Sie besitzen die beschriebenen Kind-Elemente, Attribute sowie die beiden besonderen Kind-Elemente Details und Prices, welche jeweils selbst wieder Kind-Element enthalten. Diese beiden Elemente erfordern einen XPath-Ausdruck, der über dieses Eltern-Element hinweg die jeweiligen Kinder aus-wählt. Bei einer noch tieferen Verschachtelung setzt sich dieses Verfahren fort.

-- XML-Variable erstellen
DECLARE @productXML xml, @idoc int
-- XML abrufen
SET @productXML = (
SELECT ProductNumber AS "@P-Nr",
Name AS "Name",
StandardCost AS "Prices/Standard",
ListPrice AS "Prices/List",
Size AS "Details/Size",
Color AS "Details/Color"
FROM Production.Product
ORDER BY ProductID DESC
FOR XML PATH('Product'), ROOT('Product-List'))
-- Standardzerlegung für alle Zeilen
EXEC sp_xml_preparedocument @idoc OUTPUT, @productXML
SELECT *
FROM OPENXML(@idoc, '/Product-List/Product',2)
WITH (ProductNumber nvarchar(25) '@P-Nr',
Name nvarchar(50) 'Name',
StandardCost money 'Prices/Standard',
ListPrice money 'Prices/List',
Size nvarchar(5) 'Details/Size',
Color nvarchar(15) 'Details/Color')

Das Prinzip ist verblüffend einfach, wenn man die XPath-Syntax verstanden hat. Es lassen sich sehr komplizierte und anspruchsvolle Zerlegungen denken, doch mit der XPath-Technik ist dies letztendlich im Vergleich zu anderen Datenbanken einfacher. Die vorheri-ge Abbildung fasst den Vorgang noch einmal zusammen. Deutlich ist zu erkennen, wie der so genannte XPath-Kontext Product-List/Product innerhalb von OPENXML eingerich-tet wird und weshalb die verschiedenen XPath-Ausdrücke in den einzelnen Spalten die unterschiedlichen Kinder und Kindeskinder sowie das Attribut auswählen. Durch die An-gabe 2, welche die elementzentrierte Zuordnung festlegt, hätte man übrigens das Kind Na-me auch überhaupt nicht nennen brauchen, wenn die zuzuordnende Spalte gleichfalls diesen Namen trägt.

Mit XPath ist es möglich, von jedem Knoten in einem Dokument jeden anderen Knoten zu erreichen. Dies muss sich nicht auf Elemente und Attribute begrenzen, wird allerdings für die meisten Zerlegungen durchaus der Fall sein. Dies bedeutet, man könnte aus jedem denkbaren XPath-Kontext die benötigten Zuordnungen angeben. Lediglich das Reihenele-ment wie Product sollte bereits in OPENXML ausgewählt sein. Als Beispiel für ein extra kompliziertes Vorgehen, das nur die Syntax zeigen will, wählt man in der nachfolgenden Zerlegung das Element Prices ebenfalls in OPENXML aus. Dies hat zur Folge, dass man die Eltern und sogar die Großeltern-Elemente aufrufen muss, um aus Prices wieder alle benö-tigten Blätter im XML-Baum auszuwählen.

Wie schon zuvor aufgefallen, kann man sich die Navigation durch ein XML-Dokument wie die Navigation durch eine Ordnerstruktur vorstellen. Dies erkennt man an dem Schräg-strich, der eine Ebene tiefer führt, sowie an dem einzelnen Punkt für die Eltern und an den zwei Punkten für die Großeltern-Ebene. Alternativ lassen sich auch die so genannten Ach-sen-Namen parent und ancestor angeben, wobei die beiden Doppelpunkte Achsen- und Knotennamen trennen. Das @-Zeichen steht für die Auswahl von Attributen.

SELECT *
FROM OPENXML(@idoc, '/Product-List/Product/Prices',2)
WITH (ProductNumber nvarchar(25) '../@P-Nr',
Name nvarchar(50) 'ancestor::Product/Name',
StandardCost money 'Standard',
ListPrice money 'List',
Size nvarchar(5) '../Details/Size',
Color nvarchar(15) 'parent::Product/Details/
Color')

Es entsteht wieder dieselbe Ausgabe wie zuvor, sodass sie im vorherigen Beispiel angege-ben ist und hier nicht noch einmal wiederholt wird.
    OOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt BochumOOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt BochumOOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt BochumOOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt BochumOOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt BochumOOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt BochumOOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt BochumOOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt BochumOOP Consulting MS SQL Server: XML mit XPath zerlegen - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik Business .NET Server Webservices Analysis Reporting T-SQL Bücher Intelligence Services MS XML Microsoft SQL Bremen Herne Neuss Bonn Stuttgart Velbert Mettmann Duisburg Köln Essen Dortmund Wiesbaden Hattingen Gelsenkirchen Münster Bottrop Düsseldorf Hamburg München Leipzig Ratingen Berlin Wuppertal Frankfurt Bochum
Seminare