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.