Zig
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
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});
}