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.
Bu makalede, LINQ ile XML arasındaki bazı önemli farklar ve geçerli baskın XML programlama API'si olan W3C Belge Nesne Modeli (DOM) açıklanmaktadır.
XML ağaçları oluşturmanın yeni yolları
W3C DOM'da, aşağıdan yukarıya doğru bir XML ağacı oluşturursunuz; başka bir ifadeyle, bir belge oluşturursunuz, öğeler oluşturursunuz ve sonra da öğeleri belgeye eklersiniz.
Örneğin, aşağıdaki örnek DOM'un XmlDocumentMicrosoft uygulamasını kullanarak xml ağacı oluşturmak için tipik bir yöntem kullanır.
XmlDocument doc = new XmlDocument();
XmlElement name = doc.CreateElement("Name");
name.InnerText = "Patrick Hines";
XmlElement phone1 = doc.CreateElement("Phone");
phone1.SetAttribute("Type", "Home");
phone1.InnerText = "206-555-0144";
XmlElement phone2 = doc.CreateElement("Phone");
phone2.SetAttribute("Type", "Work");
phone2.InnerText = "425-555-0145";
XmlElement street1 = doc.CreateElement("Street1");
street1.InnerText = "123 Main St";
XmlElement city = doc.CreateElement("City");
city.InnerText = "Mercer Island";
XmlElement state = doc.CreateElement("State");
state.InnerText = "WA";
XmlElement postal = doc.CreateElement("Postal");
postal.InnerText = "68042";
XmlElement address = doc.CreateElement("Address");
address.AppendChild(street1);
address.AppendChild(city);
address.AppendChild(state);
address.AppendChild(postal);
XmlElement contact = doc.CreateElement("Contact");
contact.AppendChild(name);
contact.AppendChild(phone1);
contact.AppendChild(phone2);
contact.AppendChild(address);
XmlElement contacts = doc.CreateElement("Contacts");
contacts.AppendChild(contact);
doc.AppendChild(contacts);
Dim doc As XmlDocument = New XmlDocument()
Dim name As XmlElement = doc.CreateElement("Name")
name.InnerText = "Patrick Hines"
Dim phone1 As XmlElement = doc.CreateElement("Phone")
phone1.SetAttribute("Type", "Home")
phone1.InnerText = "206-555-0144"
Dim phone2 As XmlElement = doc.CreateElement("Phone")
phone2.SetAttribute("Type", "Work")
phone2.InnerText = "425-555-0145"
Dim street1 As XmlElement = doc.CreateElement("Street1")
street1.InnerText = "123 Main St"
Dim city As XmlElement = doc.CreateElement("City")
city.InnerText = "Mercer Island"
Dim state As XmlElement = doc.CreateElement("State")
state.InnerText = "WA"
Dim postal As XmlElement = doc.CreateElement("Postal")
postal.InnerText = "68042"
Dim address As XmlElement = doc.CreateElement("Address")
address.AppendChild(street1)
address.AppendChild(city)
address.AppendChild(state)
address.AppendChild(postal)
Dim contact As XmlElement = doc.CreateElement("Contact")
contact.AppendChild(name)
contact.AppendChild(phone1)
contact.AppendChild(phone2)
contact.AppendChild(address)
Dim contacts As XmlElement = doc.CreateElement("Contacts")
contacts.AppendChild(contact)
doc.AppendChild(contacts)
Console.WriteLine(doc.OuterXml)
Bu kodlama stili XML ağacının yapısını gizler. LINQ to XML, yapıyı daha iyi gösteren alternatif bir yaklaşım olan işlevsel yapıyı da destekler. Bu yaklaşım XElement ve XAttribute oluşturucularıyla yapılabilir. Visual Basic'te, XML sabitleriyle de yapılabilir. Bu örnekte, işlevsel yapı kullanılarak aynı XML ağacının oluşturulması gösterilmektedir:
XElement contacts =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144",
new XAttribute("Type", "Home")),
new XElement("phone", "425-555-0145",
new XAttribute("Type", "Work")),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
Dim contacts = _
<Contacts>
<Contact>
<Name>Patrick Hines</Name>
<Phone Type="Home">206-555-0144</Phone>
<Phone Type="Work">425-555-0145</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>Mercer Island</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
</Contact>
</Contacts>
XML ağacını oluşturmak için kodu girintilemenin, temel alınan XML'nin yapısını gösterdiğine dikkat edin. Visual Basic sürümü XML değişmez değerlerini kullanır.
Daha fazla bilgi için bkz. XML ağaçları.
DOĞRUDAN XML öğeleriyle çalışma
XML ile programlama yaparken, birincil odağınız genellikle XML öğelerine ve belki de özniteliklere odaklanır. LINQ to XML'de doğrudan XML öğeleri ve öznitelikleriyle çalışabilirsiniz. Örneğin, aşağıdakileri yapabilirsiniz:
- Belge nesnesi kullanmadan XML öğeleri oluşturun. Bu, XML ağaçlarının parçalarıyla çalışmanız gerektiğinde programlamayı basitleştirir.
- Nesneleri doğrudan bir XML dosyasından yükleyin
T:System.Xml.Linq.XElement. -
T:System.Xml.Linq.XElementnesnelerini bir dosyaya veya akışa seri hale getirin.
Bunu, XML belgesinin XML ağacı için mantıksal kapsayıcı olarak kullanıldığı W3C DOM ile karşılaştırın. DOM'da, öğeler ve öznitelikler de dahil olmak üzere XML düğümleri bir XML belgesi bağlamında oluşturulmalıdır. DOM'da bir ad öğesi oluşturmak için kod parçası aşağıdadır:
XmlDocument doc = new XmlDocument();
XmlElement name = doc.CreateElement("Name");
name.InnerText = "Patrick Hines";
doc.AppendChild(name);
Dim doc As XmlDocument = New XmlDocument()
Dim name As XmlElement = doc.CreateElement("Name")
name.InnerText = "Patrick Hines"
doc.AppendChild(name)
Bir öğeyi birden çok belgede kullanmak istiyorsanız, düğümleri belgeler arasında içeri aktarmanız gerekir. LINQ to XML bu karmaşıklık katmanını önler.
LINQ to XML kullanırken, sınıfı yalnızca belgenin XDocument kök düzeyinde bir açıklama veya işleme yönergesi eklemek istiyorsanız kullanırsınız.
Adların ve ad alanlarının basitleştirilmiş işlenmesi
Adları, ad alanlarını ve ad alanı ön eklerini işlemek genellikle XML programlamanın karmaşık bir parçasıdır. LINQ to XML, ad alanı ön ekleriyle ilgilenme gereksinimini ortadan kaldırarak adları ve ad alanlarını basitleştirir. Ad alanı ön eklerini denetlemek istiyorsanız, bunu yapabilirsiniz. Ancak ad alanı ön eklerini açıkça denetlememeye karar verirseniz, LINQ to XML gerekirse serileştirme sırasında ad alanı ön ekleri atar veya gerekli değilse varsayılan ad alanlarını kullanarak seri hale getirir. Varsayılan ad alanları kullanılırsa, sonuçta elde edilen belgede ad alanı ön ekleri olmaz. Daha fazla bilgi için bkz . Ad alanlarına genel bakış.
DOM ile ilgili bir diğer sorun da düğümün adını değiştirmenize izin vermemesidir. Bunun yerine, yeni bir düğüm oluşturup tüm alt düğümleri bu yeni düğüme kopyalamanız gerekir; böylece, özgün düğümün kimliğini kaybedersiniz. LINQ to XML, bir düğümdeki XName özelliğini ayarlamanıza olanak tanıyarak bu sorunu önler.
XML yüklemek için statik yöntem desteği
LINQ to XML, örnek yöntemleri yerine statik yöntemler kullanarak XML yüklemenize olanak tanır. Bu, yüklemeyi ve ayrıştırma işlemini basitleştirir. Daha fazla bilgi için bkz. Dosyadan XML yükleme.
DTD yapıları için desteğin kaldırılması
LINQ to XML, varlıklar ve varlık başvuruları desteğini kaldırarak XML programlamayı daha da basitleştirir. Varlıkların yönetimi karmaşıktır ve nadiren kullanılır. Desteklerinin kaldırılması performansı artırır ve programlama arabirimini basitleştirir. LINQ to XML ağacı doldurulduğunda, tüm DTD varlıkları genişletilir.
Parçalar için destek
LINQ to XML, XmlDocumentFragment sınıfı için bir karşılık sağlamaz. Birçok durumda, ancak, XmlDocumentFragment kavramı, IEnumerable<T>XNode veya IEnumerable<T>XElement türünde bir sorgunun sonucu ile işlenebilir.
XPathNavigator desteği
LINQ to XML, XPathNavigator ad alanındaki uzantı yöntemleri aracılığıyla System.Xml.XPath için destek sağlar. Daha fazla bilgi için bkz. System.Xml.XPath.Extensions.
Boşluk ve girinti desteği
LINQ to XML, boşluğu DOM'dan daha basit işler.
Yaygın bir senaryo, girintili XML okumak, boşluk metin düğümleri olmadan bellek içi bir XML ağacı oluşturmak (boş alanı korumamak), XML üzerinde bazı işlemler yapmak ve sonra XML'yi girintili olarak kaydetmektir. XML'yi biçimlendirmeyle seri hale getirdiğinizde, XML ağacında yalnızca önemli boşluklar korunur. Bu, LINQ to XML için varsayılan davranıştır.
Bir diğer yaygın senaryo, önceden kasıtlı olarak girintilenmiş XML'yi okumak ve değiştirmektir. Bu girintiyi hiçbir şekilde değiştirmek istemeyebilirsiniz. LINQ to XML'de bunu şu şekilde yapabilirsiniz:
- XML'yi yüklerken veya ayrıştırırken boşlukları koruma.
- XML'yi seri hale getirirken biçimlendirmeyi devre dışı bırakmak.
LINQ to XML, DOM'un yaptığı gibi özel bir XText düğüm türü kullanmak yerine boşluğu bir Whitespace düğümü olarak depolar.
Ek açıklamalar için destek
LINQ to XML öğeleri genişletilebilir bir ek açıklama kümesini destekler. Bu, şema bilgileri, öğenin bir kullanıcı arabirimine bağlı olup olmadığı veya uygulamaya özgü başka herhangi bir tür bilgi gibi bir öğe hakkındaki çeşitli bilgileri izlemek için kullanışlıdır. Daha fazla bilgi için bkz. LINQ to XML ek açıklamaları.
Şema bilgileri desteği
LINQ to XML, System.Xml.Schema ad alanındaki genişletme yöntemleri aracılığıyla XSD doğrulaması için destek sağlar. XML ağacının XSD ile uyumlu olduğunu doğrulayabilirsiniz. XML ağacını şema doğrulama sonrası bilgi kümesi (PSVI) ile doldurabilirsiniz. Daha fazla bilgi için bkz. XSD ve Extensionskullanarak doğrulama.