Sample code for 30+ languages & platforms
Zig

Xml TagPath Property Explained

See more XML Examples

Demonstrates and explains the TagPath property.

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 some XML:
    try xml.loadXml("<a><bbb><ccc><ddd>1</ddd><ddd><z>zzz</z></ddd><ddd>3</ddd></ccc></bbb></a>");

    std.debug.print("{s}\n", .{try xml.getXml(alloc)});

    // This is what we have:

    // <?xml version="1.0" encoding="utf-8"?>
    // <a>
    //     <bbb>
    //         <ccc>
    //             <ddd>1</ddd>
    //             <ddd>
    //                 <z>zzz</z>
    //             </ddd>
    //             <ddd>3</ddd>
    //         </ccc>
    //     </bbb>
    // </a>

    // The TagPath property is read-only property that returns the unique path to the
    // node from the document root.

    // For example:
    var found: bool = if (xml.searchForTag2(xml, "z")) true else |_| false;
    if (found) {
        // We found a node having the tag "z".
        // The TagPath property tells us the location in the document.
        const tag_path = try xml.getTagPath(alloc);
        std.debug.print("{s}\n", .{tag_path});

        // The tagPath is bbb|ccc|ddd[1]|z

        // If we to back to the document root, we can get to the given node via the tagPath.
        xml.getRoot2();
        std.debug.print("{s}\n", .{try xml.getTag(alloc)});
        // The root tag is "a".

        // Follow the tagPath to the "z" node:
        found = if (xml.findChild2(tag_path)) true else |_| false;
        std.debug.print("found = {}, tag = {s}\n", .{ found, try xml.getTag(alloc) });
        // We are now at "z".
    }
}