Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Metaeigenschaftsattribute in einem XML-Dokument sind Attribute, die die Eigenschaften eines XML-Elements beschreiben, z. B. Element, Attribut oder ein beliebiger anderer DOM-Knoten. Diese Attribute sind im XML-Dokumenttext nicht physisch vorhanden. OPENXML stellt diese Metaeigenschaften jedoch für alle XML-Elemente bereit. Mit diesen Metaeigenschaften können Sie Informationen wie lokale Positionierungs- und Namespaceinformationen von XML-Knoten extrahieren. Diese Informationen enthalten mehr Details als in der Textdarstellung.
Sie können diese Metaeigenschaften den Rowsetspalten in einer OPENXML-Anweisung zuordnen, indem Sie den ColPattern-Parameter verwenden . Die Spalten enthalten die Werte der Metaeigenschaften, denen sie zugeordnet sind. Weitere Informationen zur Syntax von OPENXML finden Sie unter OPENXML (Transact-SQL).
Um auf die Metaeigenschaftsattribute zuzugreifen, wird ein für SQL Server spezifischer Namespace bereitgestellt. Dieser Namespace, urn:schemas-microsoft-com:xml-metaprop , ermöglicht dem Benutzer den Zugriff auf die Metaeigenschaftsattribute. Wenn das Ergebnis einer OPENXML-Abfrage in einem Randtabellenformat zurückgegeben wird, enthält die Edgetabelle eine Spalte für jedes Metaeigenschaftsattribut, mit Ausnahme der xmltext-Metaeigenschaft .
Einige der Metaeigenschaftsattribute werden für Verarbeitungszwecke verwendet. Beispielsweise wird das xmltext-Metaproperty-Attribut für die Überlaufbehandlung verwendet. Die Überlaufbehandlung bezieht sich auf die nicht verarbeiteten Daten im Dokument. Eine der Spalten im Rowset, das von OPENXML generiert wird, kann als Überlaufspalte identifiziert werden. Dies geschieht, indem Sie sie der xmltext-Metaeigenschaft zuordnen, indem Sie den ColPattern-Parameter verwenden . Die Spalte empfängt dann die Überlaufdaten. Der Flags-Parameter bestimmt, ob die Spalte alles oder nur die nicht verarbeiteten Daten enthält.
In der folgenden Tabelle sind die Metaeigenschaftsattribute aufgeführt, die jedes analysierte XML-Element besitzt. Auf diese Metaeigenschaftsattribute kann mithilfe des Namespace urn:schemas-microsoft-com:xml-metaprop zugegriffen werden. Jeder Wert, den der Benutzer direkt im XML-Dokument mithilfe dieser Metaeigenschaften festlegt, wird ignoriert.
Hinweis
Sie können in keiner XPath-Navigation auf diese Metaeigenschaften verweisen.
| Metaproperty-Attribut | BESCHREIBUNG |
|---|---|
| @mp:id | Stellt einen vom System generierten, dokumentweiten Bezeichner des DOM-Knotens bereit. Solange das Dokument nicht analysiert wird, bezieht sich diese ID auf denselben XML-Knoten. Eine XML-ID von 0 gibt an, dass das Element ein Stammelement ist. Die übergeordnete XML-ID ist NULL. |
| @mp:localname | Speichert den lokalen Teil des Namens des Knotens. Sie wird mit einem Präfix und einem Namespace-URI verwendet, um Element- oder Attributknoten zu benennen. |
| @mp:namespaceuri | Stellt den Namespace-URI des aktuellen Elements bereit. Wenn der Wert dieses Attributs NULL ist, ist kein Namespace vorhanden. |
| @mp:prefix | Speichert das Namespacepräfix des aktuellen Elementnamens. Wenn kein Präfix vorhanden ist (NULL) und ein URI angegeben wird, gibt es an, dass der angegebene Namespace der Standardnamespace ist. Wenn kein URI angegeben wird, wird kein Namespace angefügt. |
| @mp:prev | Speichert das vorherige gleichgeordnete Element relativ zu einem Knoten. Dies enthält Informationen zur Sortierung von Elementen im Dokument. @mp:prev enthält die XML-ID des vorherigen Geschwisterelements mit demselben Elternelement. Wenn sich ein Element am Anfang der gleichgeordneten Liste befindet, ist @mp:prev NULL. |
| @mp:xmltext | Wird für Verarbeitungszwecke verwendet. Es ist die textuelle Serialisierung des Elements und seiner Attribute und der Unterelemente, wie in der Behandlung von Überläufen in OPENXML verwendet. |
Diese Tabelle enthält die zusätzlichen übergeordneten Eigenschaften, die bereitgestellt werden, und mit denen Sie Informationen zur Hierarchie abrufen können.
| Übergeordnetes Metaproperty-Attribut | BESCHREIBUNG |
|---|---|
| @mp:parentid | Entspricht .. /@mp:id |
| @mp:parentlocalname | Entspricht .. /@mp:localname |
| @mp:parentnamespacerui | Entspricht .. /@mp:namespaceuri |
| @mp:parentprefix | Entspricht .. /@mp:prefix |
Beispiele
Die folgenden Beispiele veranschaulichen, wie OPENXML zum Erstellen verschiedener Rowsetansichten verwendet wird.
Ein. Zuordnen der OPENXML-Rowsetspalten zu den Metaeigenschaften
In diesem Beispiel wird OPENXML verwendet, um eine Rowsetansicht des XML-Beispieldokuments zu erstellen. Insbesondere wird gezeigt, wie die verschiedenen Metaeigenschaftsattribute mithilfe des ColPattern-Parameters zeilensatzspalten in einer OPENXML-Anweisung zugeordnet werden können.
Die OPENXML-Anweisung veranschaulicht Folgendes:
Die ID-Spalte wird dem attribut @mp:id metaproperty zugeordnet und gibt an, dass die Spalte die vom System generierte eindeutige XML-ID des Elements enthält.
Die übergeordnete Spalte ist @mp:parentid zugeordnet und gibt an, dass die Spalte die XML-ID des übergeordneten Elements enthält.
Die spalte "parentLocalName" wird @mp:parentlocalname zugeordnet und gibt an, dass die Spalte den lokalen Namen des übergeordneten Elements enthält.
Die SELECT-Anweisung gibt dann das Rowset zurück, das von OPENXML bereitgestellt wird:
DECLARE @idoc int
DECLARE @doc nvarchar(1000)
-- Sample XML document
SET @doc = N'<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 9)
WITH (id int '@mp:id',
oid char(5),
date datetime,
amount real,
parentIDNo int '@mp:parentid',
parentLocalName varchar(40) '@mp:parentlocalname')
EXEC sp_xml_removedocument @idoc
Dies ist das Ergebnis:
id oid date amount parentIDNo parentLocalName
--- ------- ---------------------- ---------- ------------ ---------------
6 O1 1996-01-20 00:00:00.000 3.5 2 Customer
10 O2 1997-04-30 00:00:00.000 13.4 2 Customer
19 O3 1999-07-14 00:00:00.000 100.0 15 Customer
25 O4 1996-01-20 00:00:00.000 10000.0 15 Customer
B. Abrufen des gesamten XML-Dokuments
In diesem Beispiel wird OPENXML verwendet, um eine einspaltige Rowsetansicht des XML-Beispieldokuments zu erstellen. Diese Spalte, Col1, wird der xmltext-Metaeigenschaft zugeordnet und wird zu einer Überlaufspalte. Daher empfängt die Spalte die nicht verarbeiteten Daten. In diesem Fall ist es das gesamte Dokument.
Die SELECT-Anweisung gibt dann das vollständige Rowset zurück.
DECLARE @idoc int
DECLARE @doc nvarchar(1000)
SET @doc = N'<?xml version="1.0"?>
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very
satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
white red">
<MyTag>Testing to see if all the subelements are returned</MyTag>
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/')
WITH (Col1 ntext '@mp:xmltext')
Um das gesamte Dokument ohne die XML-Deklaration abzurufen, kann die Abfrage wie in der folgenden Abbildung dargestellt angegeben werden:
SELECT *
FROM OPENXML (@idoc, '/root')
WITH (Col1 ntext '@mp:xmltext')
EXEC sp_xml_removedocument @idoc
Die Abfrage gibt das Stammelement zurück, das den Namenstamm und die Daten enthält, die im Stammelement enthalten sind.
C. Angeben der xmltext-Metaeigenschaft zum Abrufen der nicht verarbeiteten Daten in einer Spalte
In diesem Beispiel wird OPENXML verwendet, um eine Rowsetansicht des XML-Beispieldokuments zu erstellen. Das Beispiel zeigt, wie unkonsumierte XML-Daten abgerufen werden, indem das xmltext-Metaproperty-Attribut einer Zeilenmengenspalte in OPENXML zugeordnet wird.
Die Kommentarspalte wird als Überlaufspalte identifiziert, indem sie der metaproperty @mp:xmltext zugeordnet wird. Der Flags-Parameter ist auf 9 (XML_ATTRIBUTE und XML_NOCOPY) festgelegt. Dies gibt die attributorientierte Zuordnung an und gibt an, dass nur die nicht verarbeiteten Daten in die Überlaufspalte kopiert werden sollen.
Die SELECT-Anweisung gibt dann das von OPENXML bereitgestellte Rowset zurück.
In diesem Beispiel wird die metaeigenschaft @mp:parentlocalname für eine Spalte , ParentLocalName, in dem von OPENXML generierten Rowset festgelegt. Daher enthält diese Spalte den lokalen Namen des übergeordneten Elements.
Zwei zusätzliche Spalten werden im Rowset angegeben: parent und comment. Die übergeordnete Spalte ist @mp:parentid zugeordnet und gibt an, dass die Spalte die XML-ID des übergeordneten Elements des Elements enthält. Die Kommentarspalte wird als Überlaufspalte identifiziert, indem sie der metaproperty @mp:xmltext zugeordnet wird.
DECLARE @idoc int
DECLARE @doc nvarchar(1000)
-- sample XML document
SET @doc = N'<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 9)
WITH (oid char(5),
date datetime,
comment ntext '@mp:xmltext')
EXEC sp_xml_removedocument @idoc
Dies ist das Ergebnis. Da die OID-Spalten und Datums-Spalten bereits verbraucht sind, werden sie nicht in der Überlaufspalte angezeigt.
oid date comment
----- --------------------------- ----------------------------------------
O1 1996-01-20 00:00:00.000 <Order amount="3.5"/>
O2 1997-04-30 00:00:00.000 <Order amount="13.4">Customer was very
satisfied</Order>
O3 1999-07-14 00:00:00.000 <Order amount="100" note="Wrap it blue
white red"><Urgency>
Important</Urgency></Order>
O4 1996-01-20 00:00:00.000 <Order amount="10000"/>