Slik bruker en XML-parser Module

eXtensible Markup Language (XML) er industristandarden for å utveksle informasjon. XML tillater brukere å definere sine egne koder. Disse kodene blir så brukt til å definere dataene. For eksempel < forfatter > Syed Feroz Zainvi < /forfatter >.
Et XML-dokument har hierarkisk struktur. På toppen er det et dokument rot, etterfulgt av andre noder, noe som igjen kan ha flere noder. Det kan være attributter og data knyttet til disse nodene.
XML-parsere er verktøy som brukes til å lese eller skrive til et XML-dokument. Disse parsere er basert på enten DOM (Document Object Model) eller SAX (Simple API for XML) standarder. En sammenligning av DOM og SAX tilnærminger er gitt i mange bøker og på nettsteder også.
I denne artikkelen vil du lære å lese og trekke ut informasjon fra et XML-dokument i VC ++ program. Det forutsettes at du har grunnleggende opplevelse av å bruke Microsoft Visual Studio 6.0 (MSIDE) for å skape VC ++ apps.


    Last ned siste MSXML SDK fra http://www.microsoft.com/. Dobbeltklikk på installasjons for å installere den nedlastede SDK. Installasjonen vil opprette en mappe som starter med MSXML i sett stien slik C: eller under C: \\ Program Files. Denne mappen vil inneholde undermapper inc og lib, som inneholder biblioteker og header filer som kreves for applikasjonsutvikling. Også msxmlX.dll, msxmlXr.dll - hvor X er versjon (siste vesen 6) - vil bli kopiert til C: \\ Windows \\ System32 katalogen

    Opprett et nytt prosjekt ved hjelp MSIDE.. Det kan være av hvilken som helst type - MFC Application, Win32 Console app, etc.

    Neste lage en header fil og en kildefilen å sette koden din for parsing XML

    Ta MSXML overskrifter og biblioteker. enten manuelt eller automatisk. Manuelt kan dette gjøres ved å legge til installasjon banen og biblioteker i henhold respektive kategoriene i dialogboksen som åpnes gjennom Prosjekt innstillingsmenyen for MSIDE. Det er bedre å gjøre dette automatisk ved å bare legge følgende to linjer med kode i din header fil. #import < Msxml6.dll > named_guidsusing navne MSXML2;

    Også i din header fil put følgende erklæringer: IXMLDOMDocumentPtr m_plDomDocument; IXMLDOMElementPtr m_pDocRoot;
    void DisplayChildren (IXMLDOMNodePtr pParent); void DisplayChild (IXMLDOMNodePtr pChild); void DisplayAttributes (IXMLDOMNodePtr pChild, streng forelder, string & apname); ugyldig InitialiseXMLCOM (CString fomFileName);
    bool lastet;

    Og siden strengen blir brukt, legge følgende linjer også til din header filen: #include "streng" ved hjelp av namespace std;

    Etter disse prosjektinnstillingene, må du skrive kode for å laste et XML-dokument. Microsoft COM (Component Object Model) modulen brukes. Selv om jeg legger kommentarer før du bruker COM-funksjonen, kan interesserte lesere konsultere COM dokumentasjon andre steder. lastet = true; //for initialisering COM modul :: CoInitialize (NULL);
    //opprette en forekomst av XML-dokument HRESULT hr = m_plDomDocument.CreateInstance (L "Msxml2.DOMDocument.6.0");
    //sjekke en forekomst skapelse mislyktes og vise feil før abortere if (FAILED (t)) {_com_error er (t); AfxMessageBox (er.ErrorMessage ()); EndDialog (1); }
    //konvertere xml fil navn string til noe COM kan håndtere (Bstr) _bstr_t bstrFileName; bstrFileName = strFileName.AllocSysString ();
    //kaller IXMLDOMDocumentPtr laste funksjon for å laste XML-dokumentet variant_t vResult; vResult = m_plDomDocument- > belastning (bstrFileName);
    //hvis lasting er vellykket så får root element av dokumentet if (((bool) vResult) == TRUE) //suksess! {//Nå at dokumentet er lagt, må vi initial roten pekeren m_pDocRoot = m_plDomDocument- > documentElement;
    //følgende funksjon rekursivt traversere XML treet for barn og søsken noder DisplayChildren (m_pDocRoot); } Else {AfxMessageBox ("Dokumentet kunne laste!"); }

    Nå er det tid for traversere treet som finnes i XML-dokument. Følgende funksjoner gjør dette recursively.void DisplayChildren (IXMLDOMNodePtr pParent) {//vise gjeldende node navn DisplayChild (pParent);
    //enkel for loop å få alle barn til (IXMLDOMNodePtr pChild = pParent- > firstChild; NULL! = pChild; pChild = pChild- > nextSibling) {//for hvert barn, kaller denne funksjonen, slik at vi får //sine barn så vel DisplayChildren (pChild); }}
    annullere DisplayChild (IXMLDOMNodePtr pChild) {IXMLDOMElementPtr pElem1, pElem2; string CIDer, apname;
    //sjekke om det er et barn node. Andre betingelsen viser hvordan du kan sjekke navnet på noden if (NODE_ELEMENT == pChild- > Nodetype & & (pChild- > nodename) == _ bstr_t ("somename")) {HRESULT HR1 = pChild- > QueryInterface (MSXML2 :: IID_IXMLDOMElement, (void **) & pElem1); if (FAILED (HR1)) {_com_raise_error (HR1);}
    CIDer = static_cast < streng > ((_ bstr_t) (pElem1- > getAttribute (_T ("navn"))));
    //Process alle sine søsken rekursivt og trekke ut sine attributter for (IXMLDOMNodePtr pChild1 = pChild- > firstChild;! NULL = pChild1; pChild1 = pChild1- > nextSibling) {DisplayAttributes (pChild1, CIDer, apname);
    }
    }
    }

    For hver node, trekke sine attributter. Etter funksjonen bruker samme samtaler som funksjon ovenfor. void DisplayAttributes (IXMLDOMNodePtr pChild, string cid, string & CIDer) {IXMLDOMElementPtr Pelem,
    if (NODE_ELEMENT == pChild- > Nodetype & & (pChild- > nodename == _bstr_t ("somename1") | | pChild- > nodename == _bstr_t ("attributt"))) {HRESULT HR1 = pChild- > QueryInterface (MSXML2 :: IID_IXMLDOMElement, (void **) & Pelem); if (FAILED (HR1)) {_com_raise_error (HR1);}
    CIDer = static_cast < streng > ((_ bstr_t) (pElem- > getAttribute (_T ("navn")))); } Else (//noen forskjellige forhold som ulik nodenavnet {}}

    Interesserte brukere kan utforske skape DOM dynamisk, spørring XML-dokument ved hjelp av XPath, redigering og lagring til XML-dokument.
    < .no> Nyttige linker:
    Programmering DOM i VC ++

    Artikler om COM og strenger i Windows programmering