Sample code for 30+ languages & platforms
Zig

Parsing XML Children Having Identical Tags

See more XML Examples

Demonstrates how to deal with XML where child elements may have identical tags.

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

    // This example will get the phoneNumber's and groupMembershihpInfo's from the following XML:

    // <?xml version="1.0" encoding="UTF-8" ?>
    // <someEntries>
    //     <entry>
    //         <id>123</id>
    //         <updated>2017-07-19T05:19:57.761Z</updated>
    //         <app:edited xmlns:app="http://www.w3.org/2007/app">2017-07-19T05:19:57.761Z</app:edited>
    //         <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#contact"/>
    //         <title>George Costanza</title>
    //          <gd:name>
    //             <gd:fullName>George Costanza</gd:fullName>
    //             <gd:givenName>George</gd:givenName>
    //             <gd:familyName>Costanza</gd:familyName>
    //         </gd:name>
    //         <gd:phoneNumber rel="http://schemas.google.com/g/2005#home">(555) 123-4567</gd:phoneNumber>
    //         <gd:phoneNumber rel="http://schemas.google.com/g/2005#mobile">(555) 444-8877</gd:phoneNumber>
    //         <gd:phoneNumber rel="http://schemas.google.com/g/2005#work">(555) 678-1111</gd:phoneNumber>
    //         <gContact:groupMembershipInfo deleted="false" href="http://www.google.com/123"/>
    //         <gContact:groupMembershipInfo deleted="false" href="http://www.google.com/456"/>
    //     </entry>
    // </someEntries>
    //

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

    try xml.loadXmlFile("qa_data/xml/georgeCostanza.xml");

    const num_phone_numbers = xml.numChildrenHavingTag("entry|*:phoneNumber");
    var i: i32 = 0;
    while (i < num_phone_numbers) {
        const x_phone_number = try xml.getNthChildWithTag("entry|*:phoneNumber", i);
        defer x_phone_number.deinit();
        std.debug.print("{s}\n", .{try x_phone_number.getContent(alloc)});

        i = i + 1;
    }

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

    const num_group_memberships = xml.numChildrenHavingTag("entry|*:groupMembershipInfo");
    i = 0;
    while (i < num_group_memberships) {
        const x_membership = try xml.getNthChildWithTag("entry|*:groupMembershipInfo", i);
        defer x_membership.deinit();
        std.debug.print("{s}\n", .{try x_membership.getAttrValue(alloc, "href")});

        i = i + 1;
    }
}