Sample code for 30+ languages & platforms
Zig

Demonstrates the ChilkatPath XML Method

Demonstrates how to use the ChilkatPath method. This example uses the XML sample file pigs.xml. The pigs.xml file contains this content:

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();

    xml.loadXmlFile("qa_data/xml/pigs.xml") catch {
        std.debug.print("{s}\n", .{try xml.getLastErrorText(alloc)});
        return;
    };

    // Get the content of the "species" node for the 1st animal:
    var result: [:0]const u8 = "";
    result = try xml.chilkatPath(alloc, "animal|species|*");
    // Output should be "pot belly pig"
    std.debug.print("{s}\n", .{result});

    // Get the content of the "type" node for the 2nd animal:
    // Indexing begins at 0.  Therefore, the 2nd direct child having
    // the tag "animal" is at index 1
    result = try xml.chilkatPath(alloc, "animal[1]|type|*");
    // Output should be "House Pig"
    std.debug.print("{s}\n", .{result});

    // Find the pig having the name "Nigel" and display the
    // birth date.  To do this, we'll navigate to the node having
    // tag="name" with the exact content "Nigel", then navigate up,
    // and finally navigate back down to the "birth" node:
    result = try xml.chilkatPath(alloc, "/C/name,Nigel|..|birth|*");
    // Output should be "June, 1991"
    std.debug.print("{s}\n", .{result});

    // Navigate to the 1st animal's picture and print the filename,
    // description, and caption.
    // The "$" updates the caller's internal pointer to reference
    // the node that is the result of evaluating the path.
    // An empty string is returned for success, and a NULL/nil/0
    // pointer (reference) is returned on failure.
    result = xml.chilkatPath(alloc, "animal|picture|$") catch {
        std.debug.print("Failed to navigate to animal|picture.\n", .{});
        return;
    };

    // Display the contents of the file/description/caption child nodes
    std.debug.print("Picture Info:\n", .{});
    std.debug.print("{s}\n", .{try xml.getChildContent(alloc, "file")});
    std.debug.print("{s}\n", .{try xml.getChildContent(alloc, "description")});
    std.debug.print("{s}\n", .{try xml.getChildContent(alloc, "caption")});

    // Return back to the root of the XML document:
    xml.getRoot2();

    // Display the value of the "spay-neuter" attribute of the 1st animal:
    std.debug.print("----\n", .{});
    result = try xml.chilkatPath(alloc, "animal|gender|(spay-neuter)");
    std.debug.print("{s}\n", .{result});
}