Как уменьшить количество байтов в ответе SOAP? - PullRequest
1 голос
/ 27 июля 2010

Есть ли способ уменьшить количество байтов, отправляемых в сеть из ответа SOAP? Я использую nuSoap в PHP и хотел бы избежать xsi: type = "xsd: string", xsi: type = "xsd: int" в каждом узле. Есть ли способ сделать это?

Заранее спасибо с.

Ответы [ 3 ]

1 голос
/ 02 августа 2010

Если вы строго привязаны к отправке действительного ответа SOAP обратно во Flash-клиент, и если использование действительной схемы не является опцией (что упростит разметку вывода), то нет, вы ничего не можете с этим поделать 1002 * ...

Однако, если вы НЕ привязаны к отправке действительного ответа SOAP, и ваш разработчик на самом деле настаивает на получении не многословной разметки, то у вас есть возможность развернуть свою собственную. Если это так, читайте дальше.

Вы можете использовать некоторые из существующих классов XML Serializer, доступных через PEAR или из другого источника . Если вы хотите пойти по пути Trully-Roll-Your-Own, есть PHP классы , которые помогут вам создать действительный XML напрямую.

Чтобы не повторять то, что говорится в другом месте, вот подробный пример того, как сериализовать некоторые данные, используя 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>

Надеюсь, это поможет.

0 голосов
/ 02 августа 2010

Удалите пробелы и скопируйте содержимое во время транспортировки.

header('Content-Encoding: gzip');
$xml=new DOMDocument($soap);
$xml->preserveWhiteSpace(FALSE);
echo $xml->saveXML();
0 голосов
/ 27 июля 2010

Обычный способ сделать это - включить сжатие на уровне HTTP.Если вы хотите убедиться, что вы всегда сжимаете данные, вы можете даже отклонить запросы SOAP, которые не сжимаются.(A популярный софт для вопросов и ответов делает это.)

...