Delphi - Az IXMLNode interfész

IXMLNode 1. rész

forráskód letöltése
Az IXMLNode egy olyan interfész, amelyen keresztül egy XML dokumentum csomópontjait kezelhetjük. Az IXMLNode interfész hasonló az IDOMNode interfészhez, ami a Document Object Model (DOM) specifikáció része. Mindemellett az IXMLNode interfész leegyszerűsíti a csomópontok szerkesztését, és a csomópontok közötti navigációt. Több property-t és metódust tartalmaz az IDOMElement interfészből, amelyek leegyszerűsítik egy XML csomópont vizsgálatát, valamint elősegítik az XML struktúrákban tárolt adatokhoz való hozzáférést.
AttributeNodes
Osztály: IXMLNode
property AttributeNodes: IXMLNodeList;
Az aktuális csomópont attribútumait tartalmazó csomópontok IXMLNodeList típusú objektumát adja vissza.
<employee firstname=”Janet” lastname=”Baldwin” age=28>
A fenti példában az „employee” csomópont három attribútuma a „firstname”, „lastname” és az „age”. Ha csak az attribútumok értékeire vagyunk kíváncsiak, akkor használhatjuk az Attributes property-t is. Ha viszont szükségünk van az attribútumok számára, neveire, esetleg törölni, vagy hozzáadni akarunk attribútumokat, akkor az AttributeNodes property-t kell használnunk.
Csak az elem csomópontoknak lehetnek attribútumai, de nem minden elem csomópontnak vannak. Ha nincsenek attribútumok, akkor az AttributeNodes property-ben egy üres listát kapunk.
A csomópont attribútumai nem érhetők el a ChildNodes property-n keresztül, mivel azok nem gyermek csomópontok.
Attributes
Osztály: IXMLNode
property Attributes[const AttrName: DOMString]: OleVariant;
Ha tudjuk a csomópont attribútumának nevét, akkor az értékét ezzel a property-vel kérdezhetjük le. A property tömb típusú, indexként az attribútum nevét kell megadni.
ChildNodes
Osztály: IXMLNode
property ChildNodes: IXMLNodeList;
Ebből a property-ből gyermek csomópontok listáját kapjuk meg egy IXMLNodeList típusú objektumban.
ChildValues
Osztály: IXMLNode
property ChildValues[const IndexOrName: OleVariant]: OleVariant; default;
Az IndexOrName index által meghatározott gyermek elem értékét adja vissza a property. Az IndexOrName index lehet a gyermek csomópont objektuma, vagy a neve. Ha nem található olyan gyermek csomópont, amely az IndexOrName index-nek megfelel, akkor kivétel keletkezik. A visszaadott érték az elem típusától függ:
Érték Típus
ntElement ha az elem csak szöveget tartalmaz, akkor az eredmény a szöveg lesz, ellenkező esetben az első gyermek csomópont értéke.
ntText a csomópont által tartalmazott szöveg.
ntCData CDATA szekció tartalma.
ntProcessingInstr a feldolgozási instrukciók tartalma.
ntComment a csomópont értéke (szöveg).
Collection
Osztály: IXMLNode
property Collection: IXMLNodeCollection;
Ebben a property-ben az azonos típusú, és ugyanazon szülő csomóponthoz tartozó csomópontokat kapjuk meg egy IXMLNodeCollection típusú objektumban. A könnyebb érthetőség kedvéért nézzünk erre egy példát:
<reszleg>
  <dolgozo>
    <nev>Kovács József</nev>
  </dolgozo>
  <dolgozo>
    <nev>Nagy Aranka</nev>
  </dolgozo> 
  <vezeto>
    <nev>Horváth Alajos</nev>
  </vezeto>
</reszleg>
Legyen az aktuális csomópont az első <dolgozo> elem. Ekkor a szülő csomópont (ParentNode) a <reszleg> elem, és a Collection property azokat a csomópontokat fogja tartalmazni, amelyek szülő csomópontja a <reszleg> elem, és a csomópont típusa <dolgozo>, és a <vezeto> csomópont nem fog szerepelni ebben az objektumban.
DOMNode
Osztály: IXMLNode
property DOMNode: IDOMNode;
Ez a property hozzáférést biztosít a csomópont IDOMNode típusú objektumához, amin keresztül elérhetjük az alacsonyabb szintű property-ket és metódusokat. Az alkalmazások többsége nem használja ki ezt a lehetőséget, helyette az IXMLNode interfészt használja.
HasChildNodes
Osztály: IXMLNode
property HasChildNodes: Boolean;
A property értéke igaz, ha a csomópontnak vannak gyermek csomópontjai, és hamis, ha nincsenek. Az attribútumok, és a szöveges tartalom nem számít csomópontnak.
IsTextElement
Osztály: IXMLNode
property IsTextElement: Boolean;
A property értéke igaz, ha a csomópont csak egy egyszerű szöveges adatot tartalmaz, pl.:
<nev>Kovács József</nev>
LocalName
Osztály: IXMLNode
property LocalName: DOMString;
A csomópont nevét adja vissza ez a property. Csak az ntElement és ntAttribute típusú csomópontoknak van neve. A név nem fogja tartalmazni a névtér előtagot. Ha a property nincs definiálva, akkor használjuk helyette a NodeName property-t. Ha a név előtt nincs megadva a névtér előtag, akkor a két property értéke megegyezik.
NamespaceURI
Osztály: IXMLNode
property NamespaceURI: DOMString;
A property visszaadja a csomópont névterének Universal Resource Identifier (URI) azonosítóját. Csak abban az esetben adja ezt vissza, ha a csomópont nevénél ez meg van adva. Alapértelmezés szerint az IXMLNode interfész az URI-t nem teszi hozzá a csomópont nevéhez.
NodeName
Osztály: IXMLNode
property NodeName: DOMString;
A csomópont nevét adja vissza ez a property. Ha a névtér is meg van adva a név előtt, akkor a property értéke azt is tartalmazni fogja. A visszaadott név függ a csomópont típusától is:
Típus Név
ntAttribute az attribútum neve
ntElement az elem neve
ntText ‘#text’
ntCData ‘#cdata-section’
ntEntityRef az egyedhivatkozás neve
ntEntity az egyed neve
ntProcessingInstr a feldolgozási instrukció célja
ntComment ‘#comment’
ntDocument ‘#document’
ntDocType a dokumentumtípus neve
ntDocFragment ‘#document-fragment’
ntNotation a jelölésrendszer neve
NodeType
Osztály: IXMLNode
property NodeType: TNodeType;
A csomópont típusát adja vissza ez a property. Értékei az alábbiak lehetnek:
Érték Jelentés
ntReserved nem használt
ntElement A csomópont egy olyan egyszerű elem, amely gyermek csomópontokat tartalmaz. A gyermek elemek típusai a következők lehetnek: ntElement, ntText, ntCData, ntEntityRef, ntProcessingInstr, és ntComment. A csomópontnak lehetnek attribútumai is (ntAttribute). A csomópont a következő típusú csomópontoknak lehet a gyermek eleme: ntDocument, ntDocFragment, ntEntityRef, és ntElement.
ntAttribute A csomópont egy elem attribútumát tartalmazza. Ez nem gyermeke egy másik csomópontnak, az értéke az Attributes property-vel kérdezhető le. Az ilyen típusú csomópontoknak lehet gyermek eleme az ntText vagy ntEntityRef típusú csomópont.
ntText Egyszerű szöveg, ami nem tartalmazhat gyermek elemeket, viszont az a következő csomópont típusoknak lehet a gyermek csomópontja: ntAttribute, ntDocFragment, ntElement, vagy ntEntityRef.
ntCData A csomópont egy CDATA szakaszt reprezentál az XML forráskódban, és tagolt, formázott szöveget tartalmazhat. Nem lehet gyermek eleme, viszont a következő típusoknak lehet gyermeke: ntDocFragment, ntEntityRef, vagy ntElement.
ntEntityRef A csomópont többféle hivatkozást tartalmazhat egy másik egyedre
A következő típusok lehetnek a gyermekei: ntElement, ntProcessingInstr, ntComment, ntText, ntCData, és ntEntityRef. A következő típusoknak lehet gyermeke: ntAttribute, ntDocFragment, ntElement, vagy ntEntityRef.
ntEntity A csomópont egy kiterjesztett egyed elemet reprezentál. Gyermekei szintén kiterjesztett egyedek lehetnek, például ntText vagy ntEntityRef csomópontok. Csak az ntDocType típusú csomópontnak lehet a gyermeke.
ntProcessingInstr A csomópont egy feldolgozási instrukciót tartalmaz (PI – Processing Instruction). Ennek az elemnek nem lehetnek gyermek elemei, viszont gyermeke lehet az ntDocument, ntDocFragment, ntElement, vagy ntEntityRef típusú elemeknek.
ntComment A csomópont egy megjegyzést tartalmaz az XML dokumentumban. Nem lehetnek gyermek elemei, viszont a következő elemeknek lehet a gyermeke: ntDocument, ntDocFragment, ntElement, és ntEntityRef.
ntDocument A csomópont a dokumentum gyökér eleme. Egyetlen ntElement típusú gyermek eleme lehet (DocumentElement). Ezen kívül az alábbi elemek lehetnek még a gyermek elemei: ntProcessingInstr, ntComment, és ntDocType. Mivel ez a gyökér elem, így ennek nem lehet szülő eleme.
ntDocType A csomópont a dokumentum típusát adja meg (<!DOCTYPE > elem). Lehet gyermek eleme az ntNotation és ntEntity típusú csomópont. Mindig a DocumentElemet gyermek eleme.
ntDocFragment Egy egyszerű csomópont vagy csoport, amelyet a dokumentum ténylegesen nem tartalmaz. Gyermek elemei lehetnek a ntElement, ntProcessingInstr, ntComment, ntText, ntCData, és ntEntityRef csomópontok. Soha nincs szülő eleme.
ntNotation A csomópont egy jelölésrendszert határoz meg a dokumentum típus deklarációban. Mindig az ntDocType csomópont gyermek eleme, és nem lehetnek gyermek elemei.
NodeValue
Osztály: IXMLNode
property NodeValue: OleVariant;
A csomópont értékét adja vissza, illetve ezen keresztül adhatjuk meg az új értéket. Az érték típusa a csomópont típusától függ (lásd. ChildValues property).
OwnerDocument
Osztály: IXMLNode
property OwnerDocument: IXMLDocument;
Visszaadja az XML dokumentum IXMLDocument interfészének objektumát.
ParentNode
Osztály: IXMLNode
property ParentNode: IXMLNode;
A szülő csomópont IXMLNode objektumát adja vissza.
Prefix
Osztály: IXMLNode
property Prefix: DOMString;
A csomópont nevének névtér előtagját adja vissza a property. A névtér előtag a névtér URI szimbolikus neve:
<xsi:Name First=Janet Last=Baldwin>
A fenti példában a csomópont neve „Name”, míg a névtér előtag az „xsi”. Névtér előtag külön megadható az attribútumoknak is, viszont ha nem adjuk meg, akkor nem fogja örökölni a csomópont névterét.
<xsi:Name xsn:First=Janet Last=Baldwin>
A fenti példában két attribútum van: az első a „First”, a második pedig a „Last”. Az első attribútum névtér előtagja „xsn”, a másodiké pedig egy üres sztring.
ReadOnly
Osztály: IXMLNode
property ReadOnly: Boolean;
Ha a property értéke igaz, akkor a csomópont adatai nem szerkeszthetők. Ha az értéke hamis, akkor a csomópont módosítható.
Text
Osztály: IXMLNode
property Text: DOMString;
A csomópont szövegét adja vissza ez a property, illetve ezen keresztül adható meg. Ha a csomópont a következőképpen néz ki:
<name> Janet Baldwin </name>
akkor a text property értéke „Janet Baldwin”.
Ha a csomópontnak vannak gyermek csomópontjai, akkor a property használata kivételt okoz.
XML
Osztály: IXMLNode
property XML: DOMString;
A csomópont tartalmát adja vissza ez a property XML formátumban. Az XML gyökere az aktuális csomópont lesz.

IXMLNode cikksorozat