Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Database
Microsoft Fabric'te SQL veritabanı
Giriş olarak sağlanan XML metnini okur, MSXML ayrıştırıcısını (msxmlsql.dll) kullanarak metni ayrıştırıyor ve ayrıştırılmış belgeyi kullanıma hazır durumda sağlıyor. Bu ayrıştırılmış belge, XML belgesindeki çeşitli düğümlerin ağaç gösterimidir: öğeler, öznitelikler, metin, açıklamalar vb.
sp_xml_preparedocument, XML belgesinin yeni oluşturulan iç gösterimine erişmek için kullanılabilecek bir tanıtıcı döndürür. Bu tanıtıcı oturum sırasında veya sp_xml_removedocumentyürütülerek tanıtıcı geçersiz kılınana kadar geçerlidir.
Ayrıştırılmış bir belge SQL Server'ın iç önbelleğinde depolanır. MSXML ayrıştırıcısı, SQL Server için kullanılabilir toplam belleğin sekizde birini kullanabilir. Belleğin tükenmesini önlemek için sp_xml_removedocument çalıştırarak belge artık gerekli olmadığı anda belleği boşaltın. Çoğu durumda node() yöntemi daha iyi bir alternatif olabilir ve aşırı bellek kullanımını önlemeye yardımcı olabilir.
Geriye dönük uyumluluk için sp_xml_preparedocument, bu karakterler yerleşik olsa bile özniteliklerdeki CR (char(13)) ve LF (char(10)) karakterlerini daraltıyor.
Not
sp_xml_preparedocument tarafından çağrılan XML ayrıştırıcısı, iç DTD'leri ve varlık bildirimlerini ayrıştırabilir. Kötü amaçlı olarak oluşturulmuş DTD'ler ve varlık bildirimleri hizmet reddi saldırısı gerçekleştirmek için kullanılabildiğinden, kullanıcıların güvenilmeyen kaynaklardan sp_xml_preparedocumentXML belgelerini doğrudan geçirmemelerini kesinlikle öneririz.
Özyinelemeli varlık genişletme saldırılarını azaltmak için sp_xml_preparedocument, belgenin en üst düzeyinde tek bir varlığın altında genişletilebilen varlık sayısını 10.000 ile sınırlar. Sınır, karakter veya sayısal varlıklar için geçerli değildir. Bu sınır, birçok varlık başvurusuna sahip belgelerin depolanmasına izin verir, ancak tek bir varlığın 10.000'den uzun bir zincirde özyinelemeli olarak genişletilmesine engel olur.
sp_xml_preparedocument, bir kerede açık olabilecek öğe sayısını 256 ile sınırlar.
Transact-SQL söz dizimi kuralları
Sözdizimi
sp_xml_preparedocument hdoc OUTPUT
[ , xmltext ]
[ , xpath_namespaces ]
[ ; ]
Bağımsız değişken
Önemli
Genişletilmiş saklı yordamlar için bağımsız değişkenler, Sözdizimi bölümünde açıklandığı gibi belirli bir sırada girilmelidir. Parametreler sıra dışı girilirse bir hata iletisi oluşur.
hdoc
Yeni oluşturulan belgenin tanıtıcısı. hdoc bir tamsayıdır.
[ xmltext ]
Özgün XML belgesi. MSXML ayrıştırıcısı bu XML belgesini ayrıştırıyor.
xmltext bir metin parametresidir: char, nchar, varchar, nvarchar, text, ntext veya xml. Varsayılan değer NULLdeğeridir ve bu durumda boş bir XML belgesinin iç gösterimi oluşturulur.
Not
sp_xml_preparedocument yalnızca metni veya yazılmamış XML'i işleyebilir. Giriş olarak kullanılacak örnek değeri zaten XML yazılmışsa, önce bunu yeni bir yazılmamış XML örneğine veya dize olarak yayınlayın ve ardından bu değeri giriş olarak geçirin. Daha fazla bilgi için bkz. Yazılan XML ile yazılmamış XMLkarşılaştırma.
[ xpath_namespaces ]
OPENXML'de satır ve sütun XPath ifadelerinde kullanılan ad alanı bildirimlerini belirtir. xpath_namespaces bir metin parametresidir: char, nchar, varchar, nvarchar, text, ntext veya xml.
Varsayılan değer <root xmlns:mp="urn:schemas-microsoft-com:xml-metaprop">.
xpath_namespaces, OPENXML'deki XPath ifadelerinde kullanılan ön eklerin ad alanı URI'lerini iyi biçimlendirilmiş bir XML belgesiyle sağlar.
xpath_namespaces ad alanına başvurmak için kullanılması gereken ön eki urn:schemas-microsoft-com:xml-metapropbildirir; bu, ayrıştırılan XML öğeleri hakkında meta veriler sağlar. Bu tekniği kullanarak metaproperty ad alanı için ad alanı ön ekini yeniden tanımlayabilmenize rağmen, bu ad alanı kaybolmaz. ön ek mp, urn:schemas-microsoft-com:xml-metaprop böyle bir bildirim içermese bile için hala geçerlidir.
Dönüş kodu değerleri
0 (başarı) veya > 0 (başarısızlık).
İzinler
genel rolüne üyelik gerektirir.
Örnekler
A. İyi biçimlendirilmiş bir XML belgesi için iç gösterim hazırlama
Aşağıdaki örnek, giriş olarak sağlanan XML belgesinin yeni oluşturulan iç gösterimine bir tanıtıcı döndürür.
sp_xml_preparedocumentçağrısında varsayılan ad alanı ön eki eşlemesi kullanılır.
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. DTD ile iyi biçimlendirilmiş xml belgesi için iç gösterim hazırlama
Aşağıdaki örnek, giriş olarak sağlanan XML belgesinin yeni oluşturulan iç gösterimine bir tanıtıcı döndürür. Saklı yordam, yüklenen belgeyi belgeye dahil edilen DTD'ye göre doğrular.
sp_xml_preparedocumentçağrısında varsayılan ad alanı ön eki eşlemesi kullanılır.
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. Ad alanı URI'si belirtme
Aşağıdaki örnek, giriş olarak sağlanan XML belgesinin yeni oluşturulan iç gösterimine bir tanıtıcı döndürür.
sp_xml_preparedocument çağrısı metaproperty ad alanı eşlemesinin mp ön ekini korur ve xyz eşleme ön ekini ad alanı urn:MyNamespaceekler.
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"/>';