Tcl
Tcl
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 Tcl Downloads
load ./chilkat.dll
set success 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:
set xml [new_CkXml]
CkXml_put_Tag $xml "cdr"
CkXml_AddAttribute $xml "id" "4e5d3e7f41bf6201ad81000c29703270"
CkXml_AddAttribute $xml "e164" "6207"
CkXml_UpdateAttrAt $xml "user|grp" 1 "name" "wfln"
CkXml_UpdateAttrAt $xml "user|grp" 1 "mode" "active"
CkXml_UpdateAttrAt $xml "event" 1 "msg" "setup-to"
CkXml_UpdateAttrAt $xml "event" 1 "time" "287069"
CkXml_UpdateAttrAt $xml "event" 1 "e164" "5034"
CkXml_UpdateAttrAt $xml "event[1]" 1 "msg" "alert-from"
CkXml_UpdateAttrAt $xml "event[1]" 1 "time" "287069"
CkXml_UpdateAttrAt $xml "event[1]" 1 "e164" "5034"
CkXml_UpdateAttrAt $xml "event[2]" 1 "msg" "rel-to"
CkXml_UpdateAttrAt $xml "event[2]" 1 "time" "287079"
CkXml_UpdateAttrAt $xml "event[2]" 1 "e164" "5034"
# Show that we have the above XML
puts [CkXml_getXml $xml]
# Find the element where msg = "alert-from"
# This updates the xml object's reference to the found element (if successful).
set notUsed [CkXml_chilkatPath $xml "/A/event,msg,alert-from|$"]
if {[CkXml_get_LastMethodSuccess $xml] == 0} then {
puts "Not found."
delete_CkXml $xml
exit
}
# Get the value of the "time" attribute.
puts "time = [CkXml_getAttrValue $xml time]"
# Restore the xml object's internal reference to the root of the XML document
CkXml_GetRoot2 $xml
delete_CkXml $xml