如何减少SOAP响应中的字节数?

时间:2010-07-27 10:41:00

标签: php soap nusoap

有没有办法减少从SOAP响应发送到网络的字节数?我在PHP中使用nuSoap,并希望在每个节点中避免使用xsi:type =“xsd:string”,xsi:type =“xsd:int”。 有办法吗?

提前致谢 角

3 个答案:

答案 0 :(得分:1)

如果您严格依赖于将有效的SOAP响应发送回Flash客户端,并且如果使用有效的架构不是一个选项(这将简化输出标记),那么不,您无法对其做任何事情< /强> ...

但是,如果您不依赖于发送有效的SOAP响应,并且您的开发人员确实坚持要获得非详细标记,那么您可以选择自行编写。如果是这种情况,请继续阅读。

您可以使用PEARsome other source提供的一些现有XML Serializer类。如果您想沿着Trully-Roll-Your-Own路线走下去,可以PHP classes来帮助您直接创建有效的XML。

不要重复其他地方所说的here's in-depth example about how to serialize some data using PEAR XML_Serializer

另一个非常简单的示例,这次是基于SimpleXML的,您可以根据需要添加子元素和属性以满足所需的输出。

$xml = new SimpleXMLElement('<?xml version="1.0" standalone="yes"?>');
$ch1 = $xml->addChild("root");
$ch2 = $ch1->addChild("element");
// you obviously have no use for attributes, but I included it for completeness
$ch2->addAttribute("foo", "bar");
$ch2->addChild("subElement", "value1");

$outxml = $xml->asXML();

上面的代码会产生类似的内容:

<?xml version="1.0" standalone="yes"?>
<root>
    <element foo="bar">
         <subElement>value1</subElement>
    </element>
</root>

我希望它有所帮助。

答案 1 :(得分:0)

执行此操作的常用方法是在HTTP层中启用压缩。如果要确保始终压缩数据,甚至可以拒绝未压缩的SOAP请求。 (A popular software Q&A site这样做。)

答案 2 :(得分:0)

删除空格并在传输过程中对内容进行gzip。

header('Content-Encoding: gzip');
$xml=new DOMDocument($soap);
$xml->preserveWhiteSpace(FALSE);
echo $xml->saveXML();