LINQ to XML: osztályhierarchia, navigációs és módosító metódusok

Az egyik óriási problémám az XML osztálykönyvtárakkal, hogy nagyon sok időbe kerül, míg sikerül átlátnom, hogy melyik osztály mire való és hogyan kapcsolódik az összes többihez. Az általam ismert XML osztálykönyvtárak közös jellemzője, hogy ugyanazt az eredményt nagyon sokféleképpen lehet elérni, hiszen egy adott elem több úton is megközelíthető. Na de melyik út a legrövidebb?

A LINQ to XML, vagy gyerekkori nevén az XLinq kicsit más, az osztályok nevei magukért beszélnek, ráadásul nincs feleslegesen sok belőlük. Ezzel együtt sokat segített, hogy a Visual Studioval felrajzoltattam az osztályhierarchiát a System.Xml.Linq névtérben, így sokkal könnyebben átláttam az osztályok egymás közötti viszonyát:

LINQ to XML class diagram

Hogy ne csak a levegőben lógjanak, az XDeclaration, XName és XNamespace osztályoknál csaltam egy kicsit, nem az öröklési lánc, hanem tulajdonságok segítségével ábrázoltam őket.

A következő lépés az volt, hogy sorra vettem az egyes osztályokban lévő metódusokat és megpróbáltam őket funkciójuk alapján csoportosítani. Nagyon remek, hogy van a Studioban IntelliSense, csak éppen nem tudja különválasztani például a lekérdező és a módosító metódusokat, az ABC sorrend pedig ilyenkor nem sokat segít. Az eredmény az alábbi táblázat lett, nagyságrendileg 50 metódust találtam:

Típus Metódus vagy tulajdonság Visszatérési érték
Navigáció a gyermek elemek irányába
XContainer FirstNode { get; } XNode
XContainer LastNode { get; } XNode
XContainer* Nodes() IEnumerable<XNode>
XContainer* DescendantNodes() IEnumerable<XNode>
XElement* DescendantNodesAndSelf() IEnumerable<XNode>
XContainer Element( XName ) XElement
XContainer* Elements() IEnumerable<XElement>
XContainer* Elements( XName ) IEnumerable<XElement>
XContainer* Descendants() IEnumerable<XElement>
XContainer* Descendants( XName ) IEnumerable<XElement>
XElement* DescendantsAndSelf() IEnumerable<XElement>
XElement* DescendantsAndSelf( XName ) IEnumerable<XElement>
XElement HasElements { get; } bool
Navigáció a szülő elemek irányába
XNode* Parent { get; } XElement
XNode* Ancestors() IEnumerable<XElement>
XNode* Ancestors( XName ) IEnumerable<XElement>
XElement* AncestorsAndSelf() IEnumerable<XElement>
XElement* AncestorsAndSelf( XName ) IEnumerable<XElement>
Navigáció azonos szinten
XNode IsBefore( XNode node ) bool
XNode IsAfter( XNode node ) bool
XNode PreviousNode { get; } XNode
XNode NextNode { get; } XNode
XNode NodesBeforeSelf() IEnumerable<XNode>
XNode NodesAfterSelf() IEnumerable<XNode>
XNode ElementsBeforeSelf() IEnumerable<XElement>
XNode ElementsBeforeSelf( XName ) IEnumerable<XElement>
XNode ElementsAfterSelf() IEnumerable<XElement>
XNode ElementsAfterSelf( XName ) IEnumerable<XElement>
Navigáció az attribútumok között
XElement HasAttributes { get; } bool
XElement Attribute( XName ) XAttribute
XElement FirstAttribute { get; } XAttribute
XElement LastAttribute { get; } XAttribute
XElement Attributes() IEnumerable<XAttribute>
XElement Attributes( XName ) IEnumerable<XAttribute>
Módosítás
XElement, XAttribute SetValue( object )  
XElement, XAttribute Value { get; set; }  
Gyermek elemek és attribútumok módosítása
XContainer Add( params object[] )  
XContainer AddFirst( params object[] )  
XContainer RemoveNodes()  
XElement RemoveAttributes()  
XElement RemoveAll()  
XContainer ReplaceNodes( params object[] )  
XElement ReplaceAttributes( params object[] )  
XElement ReplaceAll( params object[] )  
XElement SetElementValue( XName, object )  
XElement SetAttributeValue( XName, object )  
Módosítás a szülőn keresztül
XNode AddBeforeSelf( params object[] )  
XNode AddAfterSelf( params object[] )  
XNode, XAttribute Remove()  
XNode ReplaceWith( params object[] )  

* A metódus szekvenciákon is működik.

Remélem más is hasznát veszi, ha hiba van benne, vagy kimaradt valami, kérlek írjatok.



Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2007.12.21. 21:25:36 | Permalink | Hozzászólások: 0 | Tárgyszavak: ,


  • Eval HtmlEncode-dal

    Balássy György (MS RD, ASP.NET MVP, MCTS) Nagyon bosszantó tud lenni, hogy az ASP.NET-es vezérlők közül még a legalapvetőbbek sem végeznek HTML kódolást, így kénytelenek vagyunk ezt mi magunk elvégezni adatkötéskor. Az eredmény egy ismétlődő és nehezen olvasható kifejezés lesz. Tovább »
  • Seven – Ready To Go

    Balássy György (MS RD, ASP.NET MVP, MCTS) Ahogy előzetes megígérték – még júliusban – elkészült a Windows 7 és a Windows Server 2008 R2! Nem tudom, hogy ki miért fog átállni, át fog-e egyáltalán, összeszedtem néhány kedvenc és nem annyira kedvenc feature-ömet. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások