Megjegyzés: A Live Space szerint a 600 pixelnél szélesebb kép már túl sok, ezért jobbnak látta használhatatlanná kicsinyíteni a képet ebben a cikkben, emiatt az rosszul jelenik meg. A cikk teljes változata, jó minőségű képpel megtalálható az MSDN Kompetencia Központ oldalán.
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 (katt a képre a teljes méretért):
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.