Function: soap-xs-parse-element
soap-xs-parse-element is a byte-compiled function defined in
soap-client.el.gz.
Signature
(soap-xs-parse-element NODE)
Documentation
Construct a soap-xs-element from NODE.
Source Code
;; Defined in /usr/src/emacs/lisp/net/soap-client.el.gz
(defun soap-xs-parse-element (node)
"Construct a `soap-xs-element' from NODE."
(let ((name (xml-get-attribute-or-nil node 'name))
(id (xml-get-attribute-or-nil node 'id))
(type (xml-get-attribute-or-nil node 'type))
(optional? (soap-node-optional node))
(multiple? (soap-node-multiple node))
(ref (xml-get-attribute-or-nil node 'ref))
(substitution-group (xml-get-attribute-or-nil node 'substitutionGroup))
(node-name (soap-l2wk (xml-node-name node))))
(cl-assert (memq node-name '(xsd:element xsd:group))
"expecting xsd:element or xsd:group, got %s" node-name)
(when type
(setq type (soap-l2fq type 'tns)))
(when ref
(setq ref (soap-l2fq ref 'tns)))
(when substitution-group
(setq substitution-group (soap-l2fq substitution-group 'tns)))
(unless (or ref type)
;; no type specified and this is not a reference. Must be a type
;; defined within this node.
(let ((simple-type (soap-xml-get-children1 node 'xsd:simpleType)))
(if simple-type
(setq type (soap-xs-parse-simple-type (car simple-type)))
;; else
(let ((complex-type (soap-xml-get-children1 node 'xsd:complexType)))
(if complex-type
(setq type (soap-xs-parse-complex-type (car complex-type)))
;; else
(error "soap-xs-parse-element: Missing type or ref"))))))
(make-soap-xs-element :name name
;; Use the full namespace name for now, we will
;; convert it to a nstag in
;; `soap-resolve-references-for-xs-element'
:namespace-tag soap-target-xmlns
:id id :type^ type
:optional? optional? :multiple? multiple?
:reference ref
:substitution-group substitution-group
:is-group (eq node-name 'xsd:group))))