LINQ to XML'e genel bakış

LINQ to XML, .NET Language-Integrated Query (LINQ) Framework'ünden yararlanan bir bellek içi XML programlama arabirimi sağlar. LINQ to XML .NET özelliklerini kullanır ve güncelleştirilmiş, yeniden tasarlanmış belge nesne modeli (DOM) XML programlama arabirimiyle karşılaştırılabilir.

XML, birçok bağlamda verileri biçimlendirmenin bir yolu olarak yaygın olarak benimsenmiştir. Örneğin, XML'yi Web'de, yapılandırma dosyalarında, Microsoft Office Word dosyalarında ve veritabanlarında bulabilirsiniz.

LINQ to XML, XML ile programlamaya yönelik güncel, yeniden tasarlanmış bir yaklaşımdır. Belge Nesne Modeli'nin (DOM) bellek içi belge değiştirme özelliklerini sağlar ve LINQ sorgu ifadelerini destekler. Bu sorgu ifadeleri XPath'ten söz dizimsel olarak farklı olsa da benzer işlevler sağlar.

LINQ to XML geliştiricileri

LINQ to XML çeşitli geliştiricileri hedefler. Yalnızca bir işi halletmek isteyen ortalama bir geliştirici için LINQ to XML, SQL'e benzer bir sorgu deneyimi sağlayarak XML'i kolaylaştırır. Programcılar yalnızca biraz çalışmayla, tercih ettikleri programlama dillerinde kısa ve güçlü sorgular yazmayı öğrenebilirler.

Profesyonel geliştiriciler, üretkenliği büyük ölçüde artırmak için LINQ to XML kullanabilir. LINQ to XML ile daha etkileyici, daha kompakt ve daha güçlü daha az kod yazabilir. Birden çok veri etki alanından gelen sorgu ifadelerini aynı anda kullanabilirler.

LINQ to XML bir XML programlama arabirimidir

LINQ to XML, .NET programlama dillerinin içinden XML ile çalışmanızı sağlayan LINQ özellikli, bellek içi bir XML programlama arabirimidir.

LINQ to XML, XML belgesini belleğe getirdiği Belge Nesne Modeli (DOM) gibidir. Belgeyi sorgulayabilir ve değiştirebilir ve değiştirdikten sonra bir dosyaya kaydedebilir veya seri hale getirerek İnternet üzerinden gönderebilirsiniz. Ancak LINQ to XML, DOM'dan farklıdır:

  • Daha hafif ve daha kolay çalışabilen yeni bir nesne modeli sağlar.
  • C# ve Visual Basic dil özelliklerinden yararlanır.

LINQ to XML'nin en önemli avantajı, DilLe Tümleşik Sorgu (LINQ) ile tümleştirilmesidir. Bu tümleştirme, öğe ve öznitelik koleksiyonlarını almak için bellek içi XML belgesine sorgu yazmanızı sağlar. LINQ to XML'nin sorgu özelliği, işlevsellik açısından (söz diziminde olmasa da) XPath ve XQuery ile karşılaştırılabilir. C# ve Visual Basic'te LINQ tümleştirmesi daha güçlü yazma, derleme zamanı denetimi ve geliştirilmiş hata ayıklayıcı desteği sağlar.

LINQ to XML'nin bir diğer avantajı da sorgu sonuçlarını parametre XElement olarak kullanabilmektir ve XAttribute nesne oluşturucuları XML ağaçları oluşturmak için güçlü bir yaklaşım sağlar. İşlevsel yapı olarak adlandırılan bu yaklaşım, geliştiricilerin XML ağaçlarını bir şekilden diğerine kolayca dönüştürmesini sağlar.

Örneğin, Örnek XML dosyasında açıklandığı gibi tipik bir XML satın alma siparişiniz olabilir: Tipik satın alma siparişi. LINQ to XML kullanarak, satın alma siparişindeki her öğe öğesinin parça numarası öznitelik değerini almak için aşağıdaki sorguyu çalıştırabilirsiniz:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<string> partNos =  from item in purchaseOrder.Descendants("Item")
                               select (string) item.Attribute("PartNumber");
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Select item.@PartNumber

C# dilinde bu, yöntem söz dizimi biçiminde yeniden yazılabilir:

IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("PartNumber"));

Başka bir örnek olarak, 100 TL'den büyük bir değere sahip öğelerin parça numarasına göre sıralanmış bir liste isteyebilirsiniz. Bu bilgileri almak için aşağıdaki sorguyu çalıştırabilirsiniz:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<XElement> pricesByPartNos =  from item in purchaseOrder.Descendants("Item")
                                 where (int) item.Element("Quantity") * (decimal) item.Element("USPrice") > 100
                                 orderby (string)item.Element("PartNumber")
                                 select item;
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
From item In purchaseOrder...<Item> _
Where (item.<Quantity>.Value * _
       item.<USPrice>.Value) > 100 _
Order By item.<PartNumber>.Value _
Select item

C# dilinde bu, yöntem söz dizimi biçiminde yeniden yazılabilir:

IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
                                        .Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
                                        .OrderBy(order => order.Element("PartNumber"));

LINQ to XML, bu LINQ özelliklerine ek olarak geliştirilmiş bir XML programlama arabirimi sağlar. LINQ to XML kullanarak şunları yapabilirsiniz:

  • Dosyalardan veya akışlardan XML yükleyin.
  • XML'yi dosyalara veya akışlara seri hale getirme.
  • İşlevsel yapıyı kullanarak sıfırdan XML oluşturun.
  • XPath benzeri eksenleri kullanarak XML sorgulama.
  • , Remove, ReplaceWithve SetValuegibi Addyöntemleri kullanarak bellek içi XML ağacını işleme.
  • XSD kullanarak XML ağaçlarını doğrulayın.
  • XML ağaçlarını bir şekilden diğerine dönüştürmek için bu özelliklerin bir bileşimini kullanın.

XML ağaçları oluşturma

LINQ to XML ile programlamanın en önemli avantajlarından biri, XML ağaçlarının kolayca oluşturulabilmesidir. Örneğin, küçük bir XML ağacı oluşturmak için aşağıdaki gibi kod yazabilirsiniz:

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 As XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone>206-555-0144</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

Not

Örneğin Visual Basic sürümünde XML değişmez değerleri kullanılır. C# sürümünde olduğu gibi Visual Basic'te de kullanabilirsiniz XElement .

Daha fazla bilgi için bkz . XML ağaçları.

Ayrıca bkz.