如何使用PHP和NuSOAP在XML响应中的标签中添加属性?

时间:2018-08-16 22:19:12

标签: php xml soap

我需要在XML格式的响应中添加一个可变值作为属性。我已经设法使用NuSoap创建WSDL,解析请求并创建XML响应。我现在面临的问题是,根据docs,必须在这样的标记内的某个位置插入属性:

<ns1:Expression code="Accepted/Rejected"/>

此响应/值/属性取决于请求中的数据是否成功存储在DB中。到目前为止,我设法通过将复杂类型添加为数组来创建标签。

内部标签:

$server->wsdl->addComplexType(
    'Sender', 
    'complexType', 
    'struct', 
    'Sender', 
    '',
    array(
        'ID' => array('name' => 'ID', 'type' => 'xsd:string'),
        'Code' => array('name' => 'Code', 'type' => 'xsd:string'),
        'Sender' => array('name' => 'Sender', 'type' => 'xsd:string')
    )
);

外部标签:

$server->wsdl->addComplexType(
    'Response', 
    'complexType', 
    'array', 
    '',
    'SOAP-ENC:Array', 
    array(),
    array(
    // 'Expression' must be a self closing tag,  with no value, just 1 attribute
        'Expression' => array('name' => 'Expression', '_' => 'code'),
        'Status' => array('name' => 'Status', 'type' => 'tns:Status')
    )
);

由于我需要将其作为响应发送,因此我在文档中搜索无济于事。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

最后,我没有找到针对此特定情况的解决方案。因此,在server.php文件中创建了一个手动生成的响应,如下所示:

服务器中的功能注册:

$server->register("Process",
array('input' => 'xsd:string'),
array('output' => 'tns:ResponseStruct'),
'ns:sales',
'ns:sales#ProcessMessageUpdate');

返回具有XML结构的字符串:

"<Respond>".
    "<ResponseCriteria>".
        "<ResponseExpression actionCode=\"".$actionCode."\"/>".
        "<ChangeStatus>".
            "<Code>".$code."</Code>".
            "<Message>".$message."</Message>".
        "</ChangeStatus>".
    "</ResponseCriteria>".
"</Respond>"

希望这对将来的某人有用