Sample code for 30+ languages & platforms
Zig

Demonstrate XML SearchForTag2

Demonstrates how to use SearchForTag2.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    const xml = try chilkat.Xml.init();
    defer xml.deinit();

    // 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>

    try xml.loadXml("<Test><testchild1>test</testchild1><testchild1>test1</testchild1><testchild1>test2</testchild1><testchild1>test3</testchild1><testchild1>test4</testchild1><testchild1>test5</testchild1><testchild1>test6</testchild1></Test>");

    var i: i32 = 0;
    var xml_search: chilkat.Xml = try xml.getRoot();
    defer xml_search.deinit();
    var after_ptr: chilkat.Xml = try xml.getRoot();
    defer after_ptr.deinit();

    // Alway begin the search from the root.
    while (if (xml_search.searchForTag2(after_ptr, "testchild1")) true else |_| false) {
        // 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.
        std.debug.print("{d}: {s}\n", .{ i, try xml_search.getContent(alloc) });
        const p_temp = after_ptr;
        after_ptr = xml_search;
        p_temp.getRoot2();
        xml_search = p_temp;
    }

    std.debug.print("----\n", .{});

    // A better way:
    const sb_state = try chilkat.StringBuilder.init();
    defer sb_state.deinit();
    i = 0;
    while (xml.nextInTraversal2(sb_state)) {
        if (xml.tagEquals("testchild1")) {
            std.debug.print("{d}: {s}\n", .{ i, try xml.getContent(alloc) });
            i = i + 1;
        }
    }

    xml.getRoot2();
}