Function: soap-wsdl-get
soap-wsdl-get is a byte-compiled function defined in
soap-client.el.gz.
Signature
(soap-wsdl-get NAME WSDL &optional PREDICATE USE-LOCAL-ALIAS-TABLE)
Documentation
Retrieve element NAME from the WSDL document.
PREDICATE is used to differentiate between elements when NAME refers to multiple elements. A typical value for this would be a structure predicate for the type of element you want to retrieve. For example, to retrieve a message named "foo" when other elements named "foo" exist in the WSDL you could use:
(soap-wsdl-get "foo" WSDL 'soap-message-p)
If USE-LOCAL-ALIAS-TABLE is not nil, soap-local-xmlns will be
used to resolve the namespace alias.
Source Code
;; Defined in /usr/src/emacs/lisp/net/soap-client.el.gz
(defun soap-wsdl-get (name wsdl &optional predicate use-local-alias-table)
"Retrieve element NAME from the WSDL document.
PREDICATE is used to differentiate between elements when NAME
refers to multiple elements. A typical value for this would be a
structure predicate for the type of element you want to retrieve.
For example, to retrieve a message named \"foo\" when other
elements named \"foo\" exist in the WSDL you could use:
(soap-wsdl-get \"foo\" WSDL \\='soap-message-p)
If USE-LOCAL-ALIAS-TABLE is not nil, `soap-local-xmlns' will be
used to resolve the namespace alias."
(let ((alias-table (soap-wsdl-alias-table wsdl))
namespace element-name element)
(when (symbolp name)
(setq name (symbol-name name)))
(when use-local-alias-table
(setq alias-table (append soap-local-xmlns alias-table)))
(cond ((consp name) ; a fully qualified name, as returned by `soap-l2fq'
(setq element-name (cdr name))
(when (symbolp element-name)
(setq element-name (symbol-name element-name)))
(setq namespace (soap-wsdl-find-namespace (car name) wsdl))
(unless namespace
(error "Soap-wsdl-get(%s): unknown namespace: %s" name namespace)))
((string-match "^\\(.*\\):\\(.*\\)$" name)
(setq element-name (match-string 2 name))
(let* ((ns-alias (match-string 1 name))
(ns-name (cdr (assoc ns-alias alias-table))))
(unless ns-name
(error "Soap-wsdl-get(%s): cannot find namespace alias %s"
name ns-alias))
(setq namespace (soap-wsdl-find-namespace ns-name wsdl))
(unless namespace
(error
"Soap-wsdl-get(%s): unknown namespace %s, referenced as %s"
name ns-name ns-alias))))
(t
(error "Soap-wsdl-get(%s): bad name" name)))
(setq element (soap-namespace-get
element-name namespace
(if predicate
(lambda (e)
(or (funcall 'soap-namespace-link-p e)
(funcall predicate e)))
nil)))
(unless element
(error "Soap-wsdl-get(%s): cannot find element" name))
(if (soap-namespace-link-p element)
;; NOTE: don't use the local alias table here
(soap-wsdl-get (soap-namespace-link-target element) wsdl predicate)
element)))