0

我想将 XML 发送到服务。该服务的描述指出“应将 XML 文档发布为 uriencoded,并使用 UTF-8 字符集作为参数 '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 需要用用户在表单字段中输入的值“填充”。

我正在尝试使用 Form Builder 创建 HTTP 服务,并尝试了所有标准选项但没有成功(有效的 http - 200。但没有响应)。也许与“xml =”参数设置有关。

我需要自定义提交的源代码吗?

4

1 回答 1

0

首先,我不得不说,Form Builder 的设计并没有考虑到这个用例,所以如果我在这里描述的内容有时令人费解,请耐心等待。如果您只想运行此示例而不是重新创建它(我建议这样做),请先下载最终表单的源代码,然后从“编辑源代码”对话框将其粘贴到新表单中,替换该表单的源代码。

  1. 首先创建一个服务。在上面的 PHP 代码中,用于传递 XML 的参数是命名xml的,所以请求体需要是<xml/>. (如果是gaga,则请求正文需要是<gaga/>。)

    服务

  2. 创建一个动作,这里在按下按钮时触发。它采用控件xml-sent的值来填充xml参数的值,因此是/xml Destination XPath Expression。这是什么xml-sent?我们将在下一步中看到这一点。

    行动

  3. 在您设置为始终隐藏的“内部”部分中,添加一个文本输出控件,将其命名为xml-sent,并将其设置为按以下表达式计算。我把这个表达式放在 3 行上,以便在此处阅读,但您需要在 Form Builder 的Validation Property对话框中输入一行。请注意您如何在此处创建要发送的 XML 文档,无论它是什么,然后使用saxon:serialize()该 XML 文档将 XML 文档转换为“文本”,这将成为xml-sent控件的值。对于调试,您可以使该部分可见,因此 XML 显示在表单中,允许您查看将发送到服务的内容。

    saxon:serialize(xxf:element('person', (
        xxf:element('first', string($first-name)), 
        xxf:element('first', string($last-name)))), 'xml')
    
于 2013-03-07T03:32:54.930 回答