我想将XML发送到服务。该服务的描述指出“XML文档应该被发布uriencoded,UTF-8字符集为paramaeter'xml'到〜/ api / xmlapi.php”并且有一个示例脚本:
xmlHttp=GetXmlHttpObject(receiveXML);
var url = "api/xmlapi.php";
var params = "xml=" + document.getElementById('xml').value;
xmlHttp.open("POST", url, true);
//Send the proper header information along with the request
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(params);
XML的格式也由服务指定,XML需要“填充”用户在表单字段中输入的值。
我正在尝试使用表单构建器来创建HTTP服务,并且尝试了所有标准选项但没有成功(有效的http - 200但没有响应)。也许与“xml =”参数设置有关。
我是否需要自定义提交的源代码?
答案 0 :(得分:0)
首先,我必须说Form Builder并不是为这个用例而设计的,所以如果我在这里所描述的,有时会感到困惑,请耐心等待。如果您只想运行此示例而不必重新创建它(我建议),请首先下载source of the final form,然后从“编辑源”对话框中将其粘贴到新表单中,替换该表单的源。
首先创建一个服务。在上面的PHP代码中,用于传递XML的参数名为xml
,因此请求正文必须为<xml/>
。 (如果是gaga
,则请求正文必须为<gaga/>
。)
创建一个动作,此处在按下按钮时触发。它需要控件xml-sent
的值来填充xml
参数的值,因此填充/xml
目标XPath表达式。这是xml-sent
的内容是什么?我们将在下一步中看到这一点。
在您设置为始终隐藏的“内部”部分中,添加文本输出控件,将其命名为xml-sent
,并将其设置为按以下表达式计算。我将此表达式放在3行,以便在此处更容易阅读,但您需要在表单生成器的验证属性对话框中输入一行。请注意您在此处创建要发送的XML文档,无论它是什么,然后使用saxon:serialize()
将该XML文档转换为“text”,这将成为xml-sent
控件的值。对于调试,您可以使该部分可见,因此XML将显示在表单中,以便您查看将要发送到服务的内容。
saxon:serialize(xxf:element('person', (
xxf:element('first', string($first-name)),
xxf:element('first', string($last-name)))), 'xml')