Aracılığıyla paylaş


Veri türü Visual Studio istemci uygulamalarında xml ile çalışma

Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.

The xml data type lets you store XML fragments, such as an XML instance missing a single top-level element, and valid XML documents in a SQL Server database.Bu tasarım karakteristiği nedeniyle xml veri türü örnekleri eşleştirilmiş, de Visual Studio 2005 bir dizi için System.Xml.XmlNode olarak yerine dönen System.Xml.XmlDocument.Parçalanmış xml desteklemez.

Doğrudan dizisi ile çalışma XmlNode tarafından bulunan xml örnek değer veri türü yöntemleri arasındaki farkları göreceksiniz InnerXml ve OuterXml üye özellikleri çalışma, özellikle de durum burada xml veri türü örnek formları geçerli bir xml belgesi, bunu bir tek üst düzey öğe. gibi

Örneğin, aşağıdaki yeni bir örneğini başlatan kod satırlarını edelim bir SQL Server Bitiş noktası (MyServer.sql_endpoint) bir Web yöntem olan Web proxy olarak (GetSomeXml) dönen bir xml veri türü satır örnek değeri:

MyServer.sql_endpoint proxy = new MyServer.sql_endpoint();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
SqlXmlDt = proxy.MyServerdboGetSomeXml();
System.Xml.XmlNode[] nodeArr = SqlXmlDt.Any;
string xmlJustChildren = nodeArr[0].InnerXml;
string xmlWithRoot = nodeArr[0].OuterXml;

The xml data type row value returned then has the following data:

<root><child/><child/></root>

If the InnerXml and OuterXml properties for nodeArr[0] are then assigned out to a pair of string variables (xmlJustChildren and xmlWithRoot), as shown in the previous code, the value of nodeArr[0].InnerXml includes only nodes that are contained within the current element (both <child/> elements but not the <root> element itself), and nodeArr[0].OuterXml works as expected: bir dizi tüm düğümleri de dahil olmak üzere XmlNodes ( <child/> öğeleri ve de <root> öğe).

Bu davranış genellikle daha sık birlikte çalıştığınız, gördüklerinizi gelen kavramından XmlDocument o sınıfın uyguladığından InnerXml ve OuterXml özellikleri farklı.İçin XmlDocument örneks, belge örnek tüm sarmalayıcı öğe görür XmlNodes belge içinde.Bu belgede üst düzey kök düğümü ve satır içi DTD'ler veya olabilir, şemalarına içerir.Bu nedenle, içerikleri XmlDocument.InnerXml aynı XmlDocument.OuterXml.

Because of these implementation specifics, using System.Xml.XmlDocumentFragment is a good alternative for working with SQL Server xml data type instances in client applications that work with Native XML Web Service.The XmlDocumentFragment class will be more familiar to developers who are used to using XmlDocument, and XmlDocumentFragment accepts an array of XmlNode without issue.

The following sections provide code and overview of how to use the XmlDocumentFragment to work with SQL Server xml data type instance values in client applications.

Çıkış XmlDocumentFragment kullanarak işleme

Nasıl bir dizi koymak aşağıdaki kod satırlarını Göster XmlNode içine bir XmlDocumentFragment, sonra düğümleri parçasını bir XPath ifade. kullanarak ve seçme

System.Xml.XmlDocumentFragment fragOut = SqlXmlDt.Any[0].OwnerDocument.CreateDocumentFragment();

//  Loop over your XmlNode array and populate your XmlDocumentFragment.
foreach (System.Xml.XmlNode xmlnode in SqlXmlDt.Any)
{
    fragOut.AppendChild(xmlnode);
}

//  Loop over your XPath expression/selection for results.
foreach (System.Xml.XmlNode xmlpath in fragOut.SelectNodes("//bar"))
{
    System.Console.WriteLine(xmlpath.OuterXml);
}

XmlDocumentFragment kullanarak bir dize ile bina giriş

Aşağıdaki giriş bir dizi oluşturmak gösterilmiştir XmlNode kullanarak bir dize atamaya InnerXml özellik XmlDocumentFragment.

//  Create an owning XmlDocument
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();

//  Create your XmlDocumentFragment.
System.Xml.XmlDocumentFragment fragIn = xmldoc.CreateDocumentFragment();

//  Fill the XmlDocumentFragment with a string.
fragIn.InnerXml =
"  <a>" +
"    <b>inputvalue</b>" +
"  </a>" +
"  topstuff" +
"  <b/>";

//  Create an XmlNode array (should never require more than one element).
System.Xml.XmlNode[] xmlnodes = new System.Xml.XmlNode[1];

//  Put the XmlDocumentFragment in the array and fill your XmlDt
xmlnodes[0] = (System.Xml.XmlNode) fragIn;
SqlXmlDt.Any = xmlnodes;

XmlDocumentFragment kullanarak bir dosyadan bina giriş

The XmlDocumentFragment class is more limited than the XmlDocument class when it comes to how to populating an instance.Aşağıdaki örnek, nasıl doldurulacağı gösterir bir XmlDocumentFragment kullanarak bir dosyadan örnek System.Xml.XmlReader.

//  Create an owning XmlDocument.
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();

//  Create your XmlDocumentFragment.
System.Xml.XmlDocumentFragment fragIn = xmldoc.CreateDocumentFragment();

//  Build an XmlReader from the file.
System.Xml.XmlReaderSettings rs = new System.Xml.XmlReaderSettings();
rs.ConformanceLevel = System.Xml.ConformanceLevel.Fragment;
System.Xml.XmlReader reader = System.Xml.XmlReader.Create("c:\\file.xml", rs);

//  Populate the fragment with the nodes from the XmlReader.
System.Xml.XmlNode child;
while (null != (child = xmldoc.ReadNode(reader)))
     fragIn.AppendChild(child);

//  Create your XmlNode array (should never require more than one element)
    System.Xml.XmlNode[] xmlnodes = new System.Xml.XmlNode[1];

//  Put the XmlDocumentFragment in the array and fill our XmlDt.
xmlnodes[0] = (System.Xml.XmlNode) fragIn;
SqlXmlDt.Any = xmlnodes;