Reprezintă instrucțiunea de procesare
Tabelul 1. Obiecte XML DOM și utilizarea acestora
Uneori, acest lucru poate fi confuz, dar obiectele de document XML pot fi (și adesea sunt) polimorfe. Deci, un nod (Nod) este în același timp un element (Element). Aceasta introduce confuzie când decideți ce obiect DOM este necesar pentru a efectua anumite acțiuni. Creați noduri utilizând un obiect Document, dar dacă aveți nevoie să adăugați atribute la nodul nou creat, va trebui să lucrați cu acesta ca unul dintre elemente. Dacă există o anumită regularitate în relațiile dintre obiecte și acțiuni asupra lor, nu am reușit încă să o deschid în timpul muncii cotidiene. Mereu mă refer la documentația MSDN pentru a vedea care interfață oferă metodele de care am nevoie pentru a rezolva o anumită sarcină. Metodele diferitelor obiecte sunt grupate logic și, aparent, acest principiu (gruparea operațiilor logic legate) a fost folosit în proiectarea DOM.
Astfel, întregul truc este de a obține obiectul DOM necesar din parserul MSXML, implementarea acestuia fiind furnizată de obiectul COM. Secvența obișnuită de acțiuni implică crearea unui obiect COM de MSXML în sine, care poate apoi să interogheze (sau să primească altfel) indicii către alte obiecte XML DOM (care la rândul lor sunt și obiecte COM).
Demo aplicație folosind XML DOM
Crearea unei aplicații heaped care utilizează multe caracteristici diferite ale MSXML nu este deloc dificilă, dar codul suplimentar poate adăuga confuzie. Așadar, am decis să scriu o aplicație simplă de consolă care face patru operații de bază:
- Încarcă fișierul XML de pe disc.
- Se caută un nod specific și se adaugă un nod copil la el.
- Găsește un alt nod și afișează textul conținut în el.
- Salvează documentul modificat pe disc.
Pentru a simplifica mai mult sarcina, am riguros "cusute" în program numele de fișiere XML și noduri. Este clar că într-o aplicație reală este puțin probabil să aplicați această tactică. Dar, în cazul nostru, are sens, deoarece simplifică în continuare codul asociat cu utilizarea MSXML.
Ca și în multe alte cazuri, am folosit biblioteca ATL ca un ambalaj convenabil pentru toate operațiile legate de COM în exemplul meu. Prin urmare, veți vedea cu siguranță modul în care folosesc obiectele CComPtr și CComQIPtr. Pentru un cont echivalent, i-am adăugat obiecte CComBSTR și CComVariant. Dacă nu vă cunosc, amintiți-vă că sunt șabloane și ei înșiși au grijă de multe detalii care nu sunt esențiale pentru scopurile noastre. Este important să ne gândim cum să căutăm noduri XML, să adăugăm noi noduri și să afișăm textul conținut în ele.
Aplicația mea de consolă va încărca un document XML numit xmldata.xml (presupunând că este în același director ca fișierul executabil) care conține următoarele date: