Sample code for 30+ languages & platforms
PureBasic

Find XML Element where Attribute = Value

See more XML Examples

Finds an XML element at a particular location where an attribute has a specified value.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkXml.pb"

Procedure ChilkatExample()

    success.i = 0

    ; We have the following XML and wish to find the value of the time attribute where msg = "alert-from".

    ; <cdr id="4e5d3e7f41bf6201ad81000c29703270" e164="6207">
    ;     <user>
    ;         <grp name="wfln" mode="active"/>
    ;     </user>
    ;     <event msg="setup-to" time="287069" e164="5034"/>
    ;     <event msg="alert-from" time="287069" e164="5034"/>
    ;     <event msg="rel-to" time="287079" e164="5034"/>
    ; </cdr>

    ; First, build the above XML:

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

    CkXml::setCkTag(xml, "cdr")
    CkXml::ckAddAttribute(xml,"id","4e5d3e7f41bf6201ad81000c29703270")
    CkXml::ckAddAttribute(xml,"e164","6207")
    CkXml::ckUpdateAttrAt(xml,"user|grp",1,"name","wfln")
    CkXml::ckUpdateAttrAt(xml,"user|grp",1,"mode","active")
    CkXml::ckUpdateAttrAt(xml,"event",1,"msg","setup-to")
    CkXml::ckUpdateAttrAt(xml,"event",1,"time","287069")
    CkXml::ckUpdateAttrAt(xml,"event",1,"e164","5034")
    CkXml::ckUpdateAttrAt(xml,"event[1]",1,"msg","alert-from")
    CkXml::ckUpdateAttrAt(xml,"event[1]",1,"time","287069")
    CkXml::ckUpdateAttrAt(xml,"event[1]",1,"e164","5034")
    CkXml::ckUpdateAttrAt(xml,"event[2]",1,"msg","rel-to")
    CkXml::ckUpdateAttrAt(xml,"event[2]",1,"time","287079")
    CkXml::ckUpdateAttrAt(xml,"event[2]",1,"e164","5034")

    ; Show that we have the above XML
    Debug CkXml::ckGetXml(xml)

    ; Find the element where msg = "alert-from"
    ; This updates the xml object's reference to the found element (if successful).
    notUsed.s = CkXml::ckChilkatPath(xml,"/A/event,msg,alert-from|$")
    If CkXml::ckLastMethodSuccess(xml) = 0
        Debug "Not found."
        CkXml::ckDispose(xml)
        ProcedureReturn
    EndIf

    ; Get the value of the "time" attribute.
    Debug "time = " + CkXml::ckGetAttrValue(xml,"time")

    ; Restore the xml object's internal reference to the root of the XML document
    CkXml::ckGetRoot2(xml)


    CkXml::ckDispose(xml)


    ProcedureReturn
EndProcedure