Function: soap-xs-parse-sequence
soap-xs-parse-sequence is a byte-compiled function defined in
soap-client.el.gz.
Signature
(soap-xs-parse-sequence NODE)
Documentation
Parse a sequence definition from XML NODE.
Returns a soap-xs-complex-type.
Source Code
;; Defined in /usr/src/emacs/lisp/net/soap-client.el.gz
(defun soap-xs-parse-sequence (node)
"Parse a sequence definition from XML NODE.
Returns a `soap-xs-complex-type'."
(cl-assert (memq (soap-l2wk (xml-node-name node))
'(xsd:sequence xsd:choice xsd:all))
nil
"unexpected node: %s" (soap-l2wk (xml-node-name node)))
(let ((type (make-soap-xs-complex-type)))
(setf (soap-xs-complex-type-indicator type)
(cl-ecase (soap-l2wk (xml-node-name node))
(xsd:sequence 'sequence)
(xsd:all 'all)
(xsd:choice 'choice)))
(setf (soap-xs-complex-type-optional? type) (soap-node-optional node))
(setf (soap-xs-complex-type-multiple? type) (soap-node-multiple node))
(dolist (r (xml-node-children node))
(unless (stringp r) ; skip the white space
(cl-case (soap-l2wk (xml-node-name r))
((xsd:element xsd:group)
(push (soap-xs-parse-element r)
(soap-xs-complex-type-elements type)))
((xsd:sequence xsd:choice xsd:all)
;; an inline sequence, choice or all node
(let ((choice (soap-xs-parse-sequence r)))
(push (make-soap-xs-element :name nil :type^ choice)
(soap-xs-complex-type-elements type))))
(xsd:attribute
(push (soap-xs-parse-attribute r)
(soap-xs-type-attributes type)))
(xsd:attributeGroup
(push (soap-xs-parse-attribute-group r)
(soap-xs-type-attribute-groups type))))))
(setf (soap-xs-complex-type-elements type)
(nreverse (soap-xs-complex-type-elements type)))
type))