Aracılığıyla paylaş


sp_xml_preparedocument (Transact-sql)

Giriş olarak, sağlanan xml metni okur msxml parser (Msxmlsql.dll) kullanarak metni ayrıştırır ve tüketim için hazır bir durumda ayrıştırılmış belge sağlar. xml belgesindeki çeşitli düğümler ağacı gösterimi çözümlenen bu belgedir: öğeleri, öznitelikleri, metin, yorum ve benzeri.

sp_xml_preparedocument xml belgesini yeni oluşturulan iç gösterimi erişmek için kullanılabilecek bir tanıtıcısı döndürür. Bu kadar yürüterek tanıtıcı geçersiz veya oturum süresince geçerli sp_xml_removedocument.

[!NOT]

Çözümlenen belgenin iç önbelleğinde depolanan SQL Server. msxml ayrıştırıcısı sekizde kullanılabilir toplam bellek için kullandığı SQL Server. Bellek çalışmasını önlemek için çalışan sp_xml_removedocument belleği boşaltmak için.

[!NOT]

İçin geriye dönük uyumluluğu, sp_xml_preparedocument cr (char(13)) ve lf (char(10)) karakter niteliklerini bile bu karakterleri entitized. daraltır.

[!NOT]

xml parser tarafından çağrılan sp_xml_preparedocument iç DTD'ler ve varlık bildirimleri ayrıştırabilirsiniz. Çünkü kötü niyetle DTD'ler ve varlık inşa bildirimleri, bir hizmet reddi saldırısı gerçekleştirmek için kullanılabilir, kullanıcılar doğrudan için güvenilir olmayan kaynaklardan gelen xml belgeleri geçmesi tavsiye sp_xml_preparedocument.

Özyinelemeli varlık genişletme saldırıları azaltmak üzere sp_xml_preparedocument 10.000 belgenin üst düzeyinde tek bir varlık altında genişletilmiş varlıkları sınırlar. Karakter veya sayısal varlıkları için sınır uygulanmaz. Bu sınır belgeleri sağlar ile pek çok varlık depolanması için başvurular ama engelleyen herhangi bir varlık yinelemeli olarak genişletilmiş bir zincir 10.000 açılımları uzun olması.

[!NOT]

sp_xml_preparedocument 256 aynı anda açık olabilir öğelerinin sayısını sınırlar.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

sp_xml_preparedocument
hdoc 
OUTPUT
[ , xmltext ]
[ , xpath_namespaces ] 

Bağımsız değişkenler

  • hdoc
    Yeni oluşturulan belge tanıtıcı iş. hdocbir tamsayıdır.

  • [ xmltext ]
    Özgün xml belgesidir. msxml ayrıştırıcısı, bu xml belgeyi çözümler. xmltextis a text parameter: char, nchar, varchar, nvarchar, text, ntext or xml. Varsayılan değer null olur, boş bir iç gösterimi durumda xml belgesi hazırlandı.

    [!NOT]

    sp_xml_preparedocument yalnızca metin veya yazılmamış xml işleyebilir. Eğer giriş olarak kullanılacak bir örneği değeri zaten xml, ilk yeni yazılmamış xml örneği veya bir dizge olarak dökme ve sonra değeri giriş olarak geçmektedir. Daha fazla bilgi için, bkz. Yazılı xml yazılmamış xml karşılaştırın.

  • [ xpath_namespaces ]
    Ad alanı bildirimi kullanılan openxml XPath ifadeleri satır ve sütun belirtir. xpath_namespacesis a text parameter: char, nchar, varchar, nvarchar, text, ntext or xml.

    Varsayılan değer <xmlns:mp root = "urn: schemas-microsoft-com: XML-metaprop">. xpath_namespacesopenxml XPath ifadelerinde iyi biçimlendirilmiş bir xml belgesi ile kullanılan önek için ad alanı URI sağlar. xpath_namespacesad alanına başvurmak için kullanılması gereken önek bildiren urn: schemas-microsoft-com: XML-metaprop; Bu ayrıştırılmış xml öğeleri hakkında meta verileri sağlar. Bu ad, bu tekniği kullanarak metaproperty ad alanı için ad alanı önekini tanımlayabilirsiniz, ancak kayıp değil. Önek mp için hala geçerli olduğunu urn: schemas-microsoft-com: XML-metaprop bile xpath_namespacesböyle bir beyanı içerir.

Dönüş Kodu Değerleri

0 (başarılı) veya >0 (hata)

İzinler

Üyelik Genel rolü.

Örnekler

A.Bir iç gösterimi iyi biçimlendirilmiş bir xml belgesi için hazırlanıyor

Aşağıdaki örnek, yeni oluşturulan iç gösterimi girdi olarak sağlanan xml belgesinin bir tanıtıcısı döner. Arama sp_xml_preparedocument, bir varsayılan ad alanı öneki eşleme kullanılır.

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

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.Bir iç dtd ile iyi biçimlendirilmiş bir xml belgesi temsili hazırlanıyor

Aşağıdaki örnek, yeni oluşturulan iç gösterimi girdi olarak sağlanan xml belgesinin bir tanıtıcısı döner. Saklı yordam karşı belgeye dahil dtd yüklenen belge doğrular. Arama sp_xml_preparedocument, bir varsayılan ad alanı öneki eşleme kullanılır.

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

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.Bir ad alanı URI belirtme

Aşağıdaki örnek, yeni oluşturulan iç gösterimi girdi olarak sağlanan xml belgesinin bir tanıtıcısı döner. Çağrı sp_xml_preparedocumentkoruyan mpöneki metaproperty ad eşleme ve ekler xyzeşleme önek ad 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"/>'

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"/>'

Ayrıca bkz.

Başvuru

xml depolanan yordamlar (Transact-sql)

Sistem saklı yordamları (Transact-sql)

sp_xml_removedocument (Transact-sql)

openxml (Transact-sql)