Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL Server
Azure SQL Database
SQL databáze v Microsoft Fabric
Přečte text XML zadaný jako vstup, parsuje text pomocí analyzátoru MSXML (msxmlsql.dll) a poskytne analyzovaný dokument ve stavu připraveném ke spotřebě. Tento analyzovaný dokument je stromovou reprezentací různých uzlů v dokumentu XML: elementy, atributy, text, komentáře atd.
sp_xml_preparedocument vrátí popisovač, který lze použít pro přístup k nově vytvořené interní reprezentaci dokumentu XML. Tento popisovač je platný během relace nebo dokud popisovač nebude zrušen spuštěním sp_xml_removedocument.
Analyzovaný dokument je uložený v interní mezipaměti SQL Serveru. Analyzátor MSXML může použít jednu osmou celkovou paměť dostupnou pro SQL Server. Pokud se chcete vyhnout nedostatku paměti, spusťte sp_xml_removedocument, aby se paměť uvolnila, jakmile už dokument není potřeba. V mnoha případech může být metoda nodes() lepší alternativou a pomáhá vyhnout se nadměrnému využití paměti.
Kvůli zpětné kompatibilitě sp_xml_preparedocument sbalí znaky CR (char(13)) a LF (char(10)) v atributech, i když jsou tyto znaky entitovány.
Poznámka
Analyzátor XML vyvolaný sp_xml_preparedocument může analyzovat interní DTD a deklarace entit. Vzhledem k tomu, že deklarací DTD a entit se zlými úmysly lze použít k útoku do odepření služby, důrazně doporučujeme, aby uživatelé přímo nepředávali dokumenty XML z nedůvěryhodných zdrojů do sp_xml_preparedocument.
Pokud chcete zmírnit rekurzivní útoky na rozšíření entit, sp_xml_preparedocument omezení na 10 000 entit, které je možné rozšířit pod jednu entitu na nejvyšší úrovni dokumentu. Limit se nevztahuje na znakové ani číselné entity. Tento limit umožňuje ukládání dokumentů s mnoha odkazy na entity, ale brání tomu, aby se každá entita rekurzivně rozbalila v řetězu delším než 10 000 rozšíření.
sp_xml_preparedocument omezuje počet prvků, které lze otevřít najednou na 256.
Syntax
sp_xml_preparedocument hdoc OUTPUT
[ , xmltext ]
[ , xpath_namespaces ]
[ ; ]
Argumenty
Důležitý
Argumenty rozšířených uložených procedur musí být zadány v určitém pořadí, jak je popsáno v části Syntaxe. Pokud jsou parametry zadány mimo pořadí, dojde k chybové zprávě.
hdoc
Popisovač nově vytvořeného dokumentu. hdoc je celé číslo.
[ xmltext ]
Původní dokument XML. Analyzátor MSXML analyzuje tento dokument XML.
xmltextu je textový parametr: znak, nchar, varchar, nvarchar, textové, ntext nebo xml. Výchozí hodnota je NULL, v takovém případě se vytvoří interní reprezentace prázdného dokumentu XML.
Poznámka
sp_xml_preparedocument může zpracovat pouze text nebo netypovaný kód XML. Pokud je hodnota instance, která se má použít jako vstup, již typ XML, přetypujte ji nejprve na novou netypovou instanci XML nebo jako řetězec a pak předejte tuto hodnotu jako vstup. Další informace naleznete v tématu Porovnání typ XML s nezatypovanými xml.
[ xpath_namespaces ]
Určuje deklarace oboru názvů, které se používají ve výrazech XPath řádků a sloupců v OPENXML. xpath_namespaces je textový parametr: znak, nchar, varchar, nvarchar, text, ntext nebo xml.
Výchozí hodnota je <root xmlns:mp="urn:schemas-microsoft-com:xml-metaprop">.
xpath_namespaces poskytuje identifikátory URI oboru názvů pro předpony použité ve výrazech XPath v OPENXML s dokumentem XML ve správném formátu.
xpath_namespaces deklaruje předponu, která se musí použít pro odkaz na obor názvů urn:schemas-microsoft-com:xml-metaprop; poskytuje metadata o parsovaných elementech XML. I když můžete předponu oboru názvů metaproperty předefinovat pomocí této techniky, tento obor názvů se neztratí. Předpona mp je stále platná pro urn:schemas-microsoft-com:xml-metaprop i v případě, že xpath_namespaces neobsahuje žádnou takovou deklaraci.
Návratové hodnoty kódu
0 (úspěch) nebo > 0 (selhání).
Dovolení
Vyžaduje členství ve veřejné roli.
Příklady
A. Příprava interní reprezentace pro dobře formátovaný dokument XML
Následující příklad vrátí popisovač nově vytvořené interní reprezentace dokumentu XML, který je poskytován jako vstup. Ve volání sp_xml_preparedocumentse použije výchozí mapování předpon oboru názvů.
DECLARE @hdoc AS INT;
DECLARE @doc AS 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.
EXECUTE sp_xml_preparedocument
@hdoc OUTPUT,
@doc;
-- Remove the internal representation.
EXECUTE sp_xml_removedocument @hdoc;
B. Příprava interní reprezentace pro dobře formátovaný dokument XML s DTD
Následující příklad vrátí popisovač nově vytvořené interní reprezentace dokumentu XML, který je poskytován jako vstup. Uložená procedura ověří dokument načtený do DTD, který je součástí dokumentu. Ve volání sp_xml_preparedocumentse použije výchozí mapování předpon oboru názvů.
DECLARE @hdoc AS INT;
DECLARE @doc AS 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>';
EXECUTE sp_xml_preparedocument
@hdoc OUTPUT,
@doc;
C. Zadání identifikátoru URI oboru názvů
Následující příklad vrátí popisovač nově vytvořené interní reprezentace dokumentu XML, který je poskytován jako vstup. Volání sp_xml_preparedocument zachová předponu mp mapování oboru názvů metaproperty a přidá předponu mapování xyz do urn:MyNamespaceoboru názvů .
DECLARE @hdoc AS INT;
DECLARE @doc AS 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.
EXECUTE sp_xml_preparedocument
@hdoc OUTPUT,
@doc, '<ROOT xmlns:xyz="urn:MyNamespace"/>';
Související obsah
- uložených procedur XML (Transact-SQL)
- uložené procedury systému (Transact-SQL)
- OPENXML (Transact-SQL)
- sys.dm_exec_xml_handles (Transact-SQL)
- sp_xml_removedocument (Transact-SQL)
- nodes() – metoda (datový typ XML)