Udostępnij przez


sp_xml_preparedocument (języka Transact-SQL)

Odczytuje tekst XML jako danych wejściowych, analizuje tekst za pomocą parsera MSXML (Msxmlsql.dll) i zapewnia dokumentu zostały przeanalizowane w stanie gotowym do spożycia.Dokument ten analizowane jest reprezentacja drzewa różne węzły w dokumencie XML: elementy, atrybuty, tekst, komentarze i tak dalej.

sp_xml_preparedocument zwraca uchwyt, który umożliwia dostęp do nowo utworzonego reprezentacji wewnętrznej dokumentu XML.To dojście jest ważne na czas trwania sesja lub do czasu unieważnienia dojścia przez wykonywanie sp_xml_removedocument.

Ostrzeżenie

Zanalizowano dokument jest przechowywany w wewnętrznej pamięci podręcznej z SQL Server.MSXML parser używa jednej ósmej całkowita pamięć dostępna dla SQL Server.Aby uniknąć braku pamięci, należy uruchomić sp_xml_removedocument aby zwolnić pamięć.

Ostrzeżenie

Do tyłu zgodności, sp_xml_preparedocument zwija CR (char(13)) i LF (char(10)) znaków w atrybutach, nawet jeśli te znaki są entitized.

Ostrzeżenie

Analizator składni XML, wywoływany przez sp_xml_preparedocument można analizować wewnętrznych elementów DTD i deklaracji obiekt .Ponieważ złośliwie skonstruowane pliki DTD i obiekt deklaracje mogą być używane do wykonywania typu "odmowa usługa ", zdecydowanie zaleca się że użytkownicy nie bezpośrednio przekazać dokumenty XML pochodzących z niepewnych źródeł do sp_xml_preparedocument.

Osłabianiu ataków rozszerzenia obiekt cyklicznych, sp_xml_preparedocument ograniczona do 10 000 liczba jednostek, które można rozwinąć pod jeden obiekt na najwyższym poziom dokumentu.Limit nie dotyczą znak lub podmioty numeryczne.Limit ten umożliwia dokumenty z wielu obiekt odniesienia przechowywane, ale zapobiega jeden obiekt rekursywnie w łańcuchu dłużej niż 10 000 osiągnięcia.

Ostrzeżenie

sp_xml_preparedocument ogranicza liczbę elementów, które mogą być otwarte w czas do 256.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

sp_xml_preparedocument
hdoc 
OUTPUT
[ , xmltext ]
[ , xpath_namespaces ] 

Argumenty

  • hdoc
    Jest dojściem do nowo utworzonego dokumentu.hdocjest liczbą całkowitą.

  • [ xmltext ]
    Jest oryginalnego dokumentu XML.MSXML parser analizuje ten dokument XML.xmltextjest to parametr tekst: char, nchar, varchar, nvarchar, text, ntext or xml.Wartością domyślną jest NULL, w którym to przypadek Wewnętrzna reprezentacja pusty dokument XML jest tworzony.

    Ostrzeżenie

    sp_xml_preparedocument może przetwarzać tylko tekst lub XML bez typu.Jeżeli już wpisano wartość wystąpienie używane jako dane wejściowe XML, najpierw oddanych do XML bez nowe wystąpienie lub jako ciąg , a następnie przekazać tę wartość jako danych wejściowych.Aby uzyskać więcej informacji, zobacz XML wpisywanych w porównaniu do pliku XML bez typu.

  • [ xpath_namespaces ]
    Określa deklaracji obszaru nazw, które są używane w wyrażeniach XPath wierszy i kolumna w OPENXML.xpath_namespacesjest to parametr tekst: char, nchar, varchar, nvarchar, text, ntext or xml.

    Wartością domyślną jest <główne xmlns:mp = "urn: schemas-microsoft-com: XML-metaprop">.xpath_namespaceszawiera identyfikatory URI obszaru nazw dla prefiksów używane w wyrażeniach XPath w OPENXML o poprawnie sformułowany dokument XML.xpath_namespacesdeklaruje prefiks używany do odwoływania się do obszaru nazw urn: schemas-microsoft-com: XML-metaprop; zawiera metadane dotyczące zanalizowano elementów XML.Chociaż można ponownie zdefiniować prefiks obszaru nazw dla nazw metaproperty, korzystając z tej techniki, ten obszar nazw nie jest tracone.Prefiks mp jest nadal ważny dla urn: schemas-microsoft-com: XML-metaprop nawet wtedy, gdy xpath_namespaces zawiera nie ma takiej deklaracja.

Wartości kodów powrotnych

0 (sukces) lub >0 (Brak)

Uprawnienia

Wymaga członkostwa w public rolę.

Przykłady

A.Przygotowywanie wewnętrzną reprezentację poprawnie sformułowany dokument XML

Poniższy przykład zwraca uchwyt do nowo utworzonego reprezentacji wewnętrznej dokumentu XML, który jest dostarczany jako danych wejściowych.W wywołaniu sp_xml_preparedocument, jest używane mapowanie prefiks obszaru nazw domyślnych.

DECLARE @hdoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
-- Remove the internal representation.
exec sp_xml_removedocument @hdoc

B.Przygotowywanie wewnętrzną reprezentację poprawnie sformułowany dokument XML z DTD

Poniższy przykład zwraca uchwyt do nowo utworzonego reprezentacji wewnętrznej dokumentu XML, który jest dostarczany jako danych wejściowych.procedura składowana sprawdza poprawność dokumentu załadowany przeciwko DTD zawarte w dokumencie.W wywołaniu sp_xml_preparedocument, jest używane mapowanie prefiks obszaru nazw domyślnych.

DECLARE @hdoc int
DECLARE @doc varchar(2000)
SET @doc = '
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE root 
[<!ELEMENT root (Customers)*>
<!ELEMENT Customers EMPTY>
<!ATTLIST Customers CustomerID CDATA #IMPLIED ContactName CDATA #IMPLIED>]>
<root>
<Customers CustomerID="ALFKI" ContactName="Maria Anders"/>
</root>'

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc

C.Określanie identyfikatora URI obszaru nazw

Poniższy przykład zwraca uchwyt do nowo utworzonego reprezentacji wewnętrznej dokumentu XML, który jest dostarczany jako danych wejściowych.Wywołanie sp_xml_preparedocument zachowuje mp prefiks do mapowania nazw metaproperty i dodaje xyz Mapowanie prefiksu obszaru nazw urn:MyNamespace.

DECLARE @hdoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order CustomerID="VINET" EmployeeID="5" 
           OrderDate="1996-07-04T00:00:00">
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order CustomerID="LILAS" EmployeeID="3" 
           OrderDate="1996-08-16T00:00:00">
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc, '<ROOT xmlns:xyz="urn:MyNamespace"/>'