Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Относится к:SQL Server
Azure SQL Database
SQL база данных в Microsoft Fabric
Считывает XML-текст, предоставленный в качестве входных данных, анализирует текст с помощью средства синтаксического анализа MSXML (msxmlsql.dll) и предоставляет проанализированный документ в состоянии, готовом к использованию. Проанализированный документ является древовидным представлением различных узлов в XML-документе: элементов, атрибутов, текста, комментариев и т. д.
sp_xml_preparedocument возвращает дескриптор, который можно использовать для доступа к созданному внутреннему представлению XML-документа. Этот дескриптор действителен во время сеанса или до тех пор, пока дескриптор не будет недопустим путем выполнения sp_xml_removedocument.
Проанализированный документ хранится во внутреннем кэше SQL Server. Средство синтаксического анализа MSXML может использовать одну восьмую общую память, доступную для SQL Server. Чтобы избежать нехватки памяти, запустите sp_xml_removedocument , чтобы освободить память, как только документ больше не требуется. Во многих случаях метод nodes() может быть лучшей альтернативой, и помочь избежать чрезмерного использования памяти.
Для обратной совместимости свернут символы CR (sp_xml_preparedocument) и LF (char(13)) в атрибутах, char(10) даже если эти символы идентицируются.
Примечание.
Средство синтаксического анализа XML, вызываемое с помощью sp_xml_preparedocument функции синтаксического анализа, может анализировать внутренние DTD и объявления сущностей. Так как вредоносные DTD и объявления сущностей могут использоваться для атаки типа "отказ в обслуживании", настоятельно рекомендуется, чтобы пользователи не напрямую передавали XML-документы из ненадежных источников sp_xml_preparedocument.
Чтобы устранить атаки рекурсивного расширения сущностей, sp_xml_preparedocument ограничивается 10 000 числом сущностей, которые можно развернуть под одной сущностью на верхнем уровне документа. Ограничение не применяется к символьным или числовым сущностям. Ограничение позволяет хранить документы с большим количеством ссылок на сущности, но предотвращает рекурсивное расширение отдельной сущности в цепочку длиннее 10 000 расширений.
sp_xml_preparedocument ограничивает количество элементов, которые могут быть открыты одновременно до 256.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_xml_preparedocument hdoc OUTPUT
[ , xmltext ]
[ , xpath_namespaces ]
[ ; ]
Аргументы
Важный
Аргументы для расширенных хранимых процедур необходимо ввести в определенном порядке, как описано в разделе Синтаксис. Если параметры введены вне порядка, возникает сообщение об ошибке.
hdoc
Дескриптор только что созданного документа. hdoc — целое число.
[ xmltext ]
Исходный XML-документ. Средство синтаксического анализа MSXML анализирует этот XML-документ.
xmltext — это текстовый параметр: char, nchar, varchar, nvarchar, text, ntext или xml. Значение по умолчанию — NULLэто внутреннее представление пустого XML-документа.
Примечание.
sp_xml_preparedocument может обрабатывать только текст или нетипизированный XML. Если значение экземпляра, передающееся в качестве входного параметра, уже является типизированным XML, его сначала необходимо привести к новому нетипизированному экземпляру XML или к строке, после чего его можно передавать в качестве входного параметра. Дополнительные сведения см. в разделе "Сравнение типизированного XML- с нетипизированным XML".
[ xpath_namespaces ]
Указывает объявления пространств имен, которые используются в выражениях XPath строк и столбцов в OPENXML. xpath_namespaces — это текстовый параметр: char, nchar, varchar, nvarchar, text, ntext или xml.
Значение по умолчанию — <root xmlns:mp="urn:schemas-microsoft-com:xml-metaprop">.
xpath_namespaces предоставляет URI пространства имен для префиксов, используемых в выражениях XPath в OPENXML, с хорошо сформированным XML-документом.
xpath_namespaces объявляет префикс, который должен использоваться для ссылки на пространство urn:schemas-microsoft-com:xml-metapropимен; это предоставляет метаданные об проанализированных XML-элементах. Хотя префикс пространства имен для пространства имен метапропастерства можно переопределить с помощью этого метода, это пространство имен не будет потеряно. Префикс mp по-прежнему действителен urn:schemas-microsoft-com:xml-metaprop , даже если xpath_namespaces не содержит такого объявления.
Значения кода возврата
0 (успешно) или > 0 (сбой).
Разрешения
Необходимо быть членом роли public.
Примеры
А. Подготовка внутреннего представления для хорошо сформированного XML-документа
В следующем примере возвращается дескриптор вновь созданного внутреннего представления XML-документа, который передается как входной аргумент. При вызове процедуры sp_xml_preparedocument используется сопоставление префикса пространства имен по умолчанию.
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. Подготовка внутреннего представления для хорошо сформированного XML-документа с помощью DTD
В следующем примере возвращается дескриптор вновь созданного внутреннего представления XML-документа, который передается как входной аргумент. Хранимая процедура проверяет корректность загруженного документа с помощью DTD, включенного в документ. При вызове процедуры sp_xml_preparedocument используется сопоставление префикса пространства имен по умолчанию.
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;
В. Укажите универсальный код ресурса (URI) пространства имен
В следующем примере возвращается дескриптор вновь созданного внутреннего представления XML-документа, который передается как входной аргумент.
sp_xml_preparedocument Вызов для сохранения mp префикса в сопоставлении пространства имен метапропастерии и добавляет xyz префикс сопоставления в пространство urn:MyNamespaceимен.
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"/>';