Sample code for 30+ languages & platforms
C

Demonstrate XML SearchForTag2

Demonstrates how to use SearchForTag2.

Chilkat C Downloads

C
#include <C_CkXml.h>
#include <C_CkStringBuilder.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkXml xml;
    int i;
    HCkXml xmlSearch;
    HCkXml afterPtr;
    HCkXml pTemp;
    HCkStringBuilder sbState;

    success = FALSE;

    xml = CkXml_Create();

    //  Load the following XML:

    //  	<Test>
    //  	    <testchild1>
    //  	        test
    //  	    </testchild1>
    //  	    <testchild1>
    //  	        test1
    //  	    </testchild1>
    //  	    <testchild1>
    //  	        test2
    //  	    </testchild1>
    //  	    <testchild1>
    //  	        test3
    //  	    </testchild1>
    //  	    <testchild1>
    //  	        test4
    //  	    </testchild1>
    //  	    <testchild1>
    //  	        test5
    //  	    </testchild1>
    //  	    <testchild1>
    //  	        test6
    //  	    </testchild1>
    //  	</Test>

    success = CkXml_LoadXml(xml,"<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>");

    i = 0;
    xmlSearch = CkXml_GetRoot(xml);
    afterPtr = CkXml_GetRoot(xml);

    //  Alway begin the search from the root.
    while (CkXml_SearchForTag2(xmlSearch,afterPtr,"testchild1")) {
        //  If successful, xmlSearch now points to the found element.
        i = i + 1;

        //  Set afterPtr = xmlSearch (so we find the next match after the one we just found)
        //  Rest xmlSearch to the root of the XML tree to be searched.
        printf("%d: %s\n",i,CkXml_content(xmlSearch));
        pTemp = afterPtr;
        afterPtr = xmlSearch;
        CkXml_GetRoot2(pTemp);
        xmlSearch = pTemp;
    }

    CkXml_Dispose(xmlSearch);
    CkXml_Dispose(afterPtr);

    printf("----\n");

    //  A better way:
    sbState = CkStringBuilder_Create();
    i = 0;
    while (CkXml_NextInTraversal2(xml,sbState) != FALSE) {
        if (CkXml_TagEquals(xml,"testchild1") == TRUE) {
            printf("%d: %s\n",i,CkXml_content(xml));
            i = i + 1;
        }

    }

    CkXml_GetRoot2(xml);


    CkXml_Dispose(xml);
    CkStringBuilder_Dispose(sbState);

    }