C# LINQ to XML

LINQ to XML एक programming interface है जिसके द्वारा आप in memory XML documents पर LINQ queries perform कर सकते है।

XML data को hold और process करने का एक माध्यम है जिसे काफी अधिक use किया जाता है। इसलिए ये जरुरी था की XML documents में available data को query करने के लिए भी एक interface create किया जाए।

LINQ to XML interface द्वारा XML documents को query करना बहुत ही आसान हो जाता है। क्योंकि यह programming environment में किया जाता है इसलिए आपको किसी प्रकार की technology सिखने की भी आवश्यकता नहीं होती है।

System.Xml.Linq

अपने program में LINQ to XML operations perform करने के लिए आपको System.Xml.Linq namespace को use करने की आवश्यकता होती है। इस namespace में LINQ to XML queries perform करने के लिए बहुत सी classes provide की गयी है।

इस namespace को आप अपने program में इस प्रकार include करते है।

using System.Linq.Xml;

हालाँकि System.Linq.Xml namespace में बहुत सी classes available लेकिन इस tutorial में उन ही classes के बारे में बताया गया है जो basic operations perform करने के लिए महत्वपूर्ण है।

XElement & XDocument

किसी भी XML document पर LINQ queries execute करने से पहले आपका उसे memory में load करना आवश्यक होता है।

XElement और XDocument classes आपको System.Xml.Linq namespace में provide की गयी है। इन classes को XML documents को memory में load करने के लिए प्रयोग किया जाता है।

ये दोनों ही classes Load() method provide करती है जो XML document को load करता है। यह method argument के रूप में एक XMLReader object या URL accept करता है जो load की किये जाने वाले document को specify करता है।

इन classes द्वारा XML document को memory में आप इस प्रकार load करते है।

XElement XEobj = XElement.Load(“URL-OF-XML-DOCUMENT”);

OR

XDocument XDobj = XDocument.Load(“URL-OF-XML-DOCUMENT”);

XElement और XDocument classes में फर्क सिर्फ इतना है की XDocument class का object XML declaration, DTD और processing instructions contain कर सकता है।

Elements()

Elements() method XElement और XDocument दोनों ही classes में provide किया गया है। इस method द्वारा आप किसी XML document के सभी elements (tags) को retrieve करते है।

जैसा की आपको पता है LINQ query के result को सिर्फ IEnumerable<T> object में store किया जा सकता है इसलिए इस method द्वारा return किये गए result को आप IEnumerable<XElement> या IEnumerable<XDocument> objects में store करते है।

Elements() method द्वारा आप इस प्रकार XML document के elements को प्राप्त करते है।

IEnumerable<XElement> IEnumObj = XEobj.Elements();

OR

IEnumerable<XDocument> IEnumObj = XDobj.Elements();

Accessing All Elements

एक बार query के result को IEnumerable<T> object में store करने के बाद उसे आप foreach loop द्वारा print कर सकते है।

किसी IEnumerable<T> object को foreach loop द्वारा इस प्रकार traverse किया जा सकता है।

foreach(var varName in IEnumObj)
{
     Console.WriteLine(varName);
}

ऊपर दिए गए तरीके से जब आप किसी XML document के elements access करते है तो आपको एक साथ सभी elements की list show होती है।

Accessing Single Element

यदि आप XML document में से किसी single element को access करना चाहते है तो इसके लिए आप Element() method को use करते है। इस method में उस element का नाम pass किया जाता है जिसे आप access करना चाहते है। यदि आप साथ ही में element की value भी प्राप्त करना चाहते है तो इसके लिए आपको Element() method के बाद dot (.) operator लगाकर value property access करनी होगी।

For each loop द्वारा किसी XML document के single element को इस प्रकार access किया जा सकता है।

foreach(var varName in IEnumObj)
{
    Console.WriteLine(varName.Element(“element-name”).Value);
}

इसी प्रकार XElement और XDocument classes में available methods का प्रयोग करके आप दूसरे operations भी perform कर सकते है। इस tutorial में सिर्फ basic operations के बारे में ही बताया गया है।

Example of LINQ to XML

C# में LINQ to XML operations का एक simple उदाहरण निचे दिया जा रहा है।

using System;
using System.Xml.Linq;
using System.Collections.Generic;

class myClass
{
    static void Main(string[] args)
    {
          XElement XEobj = XElement.load(“d:/Documents/XML/Employees.xml”);
          IEnumerable<XElement> IEnumObj = XEobj.Elements();
          foreach(var myVar in IEnumObj)
          {
               Console.WriteLine(myVar);
          }
    }
}

Employees.xml:

<Employees>
<Employee>Jacky</Employee>
<Employee>Watson</Employee>
<Employee>Ganesh</Employee>
<Employee>Pankaj</Employee>
</Employees>

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

<Employee>Jacky</Employee>
<Employee>Watson</Employee>
<Employee>Ganesh</Employee>
<Employee>Pankaj</Employee>