Sample code for 30+ languages & platforms
PureBasic

Parsing XML Children Having Identical Tags

See more XML Examples

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

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkXml.pb"

Procedure ChilkatExample()

    success.i = 0

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

    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkXml::ckLoadXmlFile(xml,"qa_data/xml/georgeCostanza.xml")

    numPhoneNumbers.i = CkXml::ckNumChildrenHavingTag(xml,"entry|*:phoneNumber")
    i.i = 0
    While i < numPhoneNumbers
        xPhoneNumber.i = CkXml::ckGetNthChildWithTag(xml,"entry|*:phoneNumber",i)
        Debug CkXml::ckContent(xPhoneNumber)
        CkXml::ckDispose(xPhoneNumber)

        i = i + 1
    Wend
    Debug "----"

    numGroupMemberships.i = CkXml::ckNumChildrenHavingTag(xml,"entry|*:groupMembershipInfo")
    i = 0
    While i < numGroupMemberships
        xMembership.i = CkXml::ckGetNthChildWithTag(xml,"entry|*:groupMembershipInfo",i)
        Debug CkXml::ckGetAttrValue(xMembership,"href")
        CkXml::ckDispose(xMembership)

        i = i + 1
    Wend


    CkXml::ckDispose(xml)


    ProcedureReturn
EndProcedure