LINQ–XML – áttekintés

A LINQ to XML egy memórián belüli XML-programozási felületet biztosít, amely a .NET nyelvvel integrált lekérdezési (LINQ) keretrendszert használja. A LINQ to XML .NET-képességeket használ, és összehasonlítható egy frissített, újratervezett dokumentumobjektum-modell (DOM) XML-programozási felületével.

Az XML-t széles körben alkalmazták az adatok számos környezetben történő formázására. Megtalálhatja például az XML-t a weben, a konfigurációs fájlokban, a Microsoft Office Word-fájlokban és az adatbázisokban.

A LINQ–XML egy naprakész, újratervezett megközelítés az XML-sel való programozáshoz. Biztosítja a dokumentumobjektum-modell (DOM) memóriabeli dokumentummódosítási képességeit, és támogatja a LINQ-lekérdezési kifejezéseket. Bár ezek a lekérdezési kifejezések szintaktikailag eltérnek az XPathtól, hasonló funkciókat biztosítanak.

LINQ xml-fejlesztőknek

A LINQ–XML számos fejlesztőt céloz meg. Egy átlagos fejlesztő számára, aki csak szeretne valamit elvégezni, a LINQ-ről XML-re megkönnyíti az XML-t az SQL-hez hasonló lekérdezési felület biztosításával. Egy kis tanulással a programozók megtanulhatnak tömör és hatékony lekérdezéseket írni a választott programozási nyelvükön.

A professzionális fejlesztők a LINQ-t XML-hez használhatják a hatékonyságuk jelentős növeléséhez. A LINQ és az XML használatával kevesebb olyan kódot írhatnak, amely kifejezőbb, kompaktabb és hatékonyabb. Egyszerre több adattartomány lekérdezési kifejezéseit is használhatják.

A LINQ–XML egy XML-programozási felület

A LINQ–XML egy LINQ-kompatibilis, memórián belüli XML-programozási felület, amely lehetővé teszi az XML használatát a .NET programozási nyelvekből.

A LINQ–XML olyan, mint a Dokumentumobjektum-modell (DOM), amelyben az XML-dokumentum a memóriába kerül. Lekérdezheti és módosíthatja a dokumentumot, és a módosítás után mentheti egy fájlba, vagy szerializálhatja és elküldheti az interneten keresztül. A LINQ és az XML azonban eltér a DOM-tól:

  • Ez egy új objektummodellt biztosít, amely kisebb súlyú és könnyebben használható.
  • Kihasználja a C# és a Visual Basic nyelvi funkcióit.

A LINQ és az XML legfontosabb előnye a nyelvvel integrált lekérdezéssel (LINQ) való integráció. Ez az integráció lehetővé teszi, hogy lekérdezéseket írjon a memóriában lévő XML-dokumentumra az elemek és attribútumok gyűjteményeinek lekéréséhez. A LINQ és az XML lekérdezési képessége az XPath és az XQuery funkcióiban (bár nem szintaxisban) hasonlítható össze. A LINQ integrálása a C#-ban és a Visual Basicben erősebb gépelést, fordítási időellenőrzést és továbbfejlesztett hibakeresői támogatást biztosít.

A LINQ xml-hez való másik előnye, hogy a lekérdezési eredményeket paraméterként XElementXAttribute és objektumkonstruktorként is használhatja, így hatékony módszert használhat az XML-fák létrehozására. Ez a funkcionális konstrukciónak nevezett megközelítés lehetővé teszi a fejlesztők számára, hogy könnyen átalakítják az XML-fákat egyik alakzatból a másikba.

Előfordulhat például, hogy a minta XML-fájlban leírtak szerint egy tipikus XML-vásárlási megrendeléssel rendelkezik: Tipikus vásárlási rendelés. A LINQ és az XML használatával a következő lekérdezést futtatva lekérheti a cikkszám attribútumértékét a beszerzési rendelés minden elemeleméhez:

// 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#-ban ez a metódusszintaxis formájában írható át:

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

Egy másik példaként érdemes lehet a 100 USD-nél nagyobb értékű elemek cikkszám szerinti listáját rendezni. Az információk beszerzéséhez futtassa a következő lekérdezést:

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

A C#-ban ez ismét átírható metódusszintaxis formájában:

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

Ezen LINQ-képességek mellett a LINQ to XML továbbfejlesztett XML programozási felületet is biztosít. A LINQ-t az XML-hez használva a következőt teheti:

  • XML betöltése fájlokból vagy streamekből.
  • XML-fájlokat vagy streameket szerializálhat.
  • Az XML létrehozása az alapoktól funkcionális szerkezet használatával.
  • Xml lekérdezése XPath-szerű tengelyekkel.
  • A memóriában lévő XML-fa kezelése olyan módszerekkel, mint a Add, Remove, ReplaceWithés SetValue.
  • XML-fák ellenőrzése az XSD használatával.
  • Ezen funkciók kombinációjával xml-fákat alakíthat át egyik alakzatból a másikba.

XML-fák létrehozása

A LINQ és az XML programozásának egyik legfontosabb előnye, hogy könnyen létrehozhat XML-fákat. Egy kis XML-fa létrehozásához például a következőképpen írhat kódot:

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>

Feljegyzés

A példa Visual Basic verziója XML-literálokat használ. A Visual Basicben is használható XElement , mint a C# verzióban.

További információ: XML-fák.

Lásd még