SOAP応答からネットワークに送信されるバイト数を減らす方法はありますか?PHPでnuSoapを使用しており、すべてのノードでxsi:type = "xsd:string"、xsi:type = "xsd:int"を使用しないようにしたいと考えています。それを行う方法はありますか?
よろしくお願いしますc。
有効なSOAP応答をFlashクライアントに送り返すことに厳密に縛られていて、有効なスキーマを使用することがオプションではない場合(出力マークアップを簡素化する)、いいえ、それについては何もできません...
ただし、有効なSOAP応答の送信に縛られておらず、開発者が非冗長なマークアップを取得することを本当に主張している場合は、独自のマークアップを作成するという選択肢があります。その場合は、読み進めてください。
PEARまたは他のソースを介して利用可能な既存のXMLシリアライザークラスのいくつかを使用できます。Trully-Roll-Your-Ownルートをたどりたい場合は、有効なXMLを直接作成するのに役立つPHP クラスがあります。
他の場所で言われていることを繰り返さないために、PEARXML_Serializerを使用して一部のデータをシリアル化する方法に関する詳細な例を次に示します。
もう1つの非常に単純な例ですが、今回は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>
お役に立てば幸いです。
これを行う通常の方法は、HTTPレイヤーで圧縮を有効にすることです。常にデータを圧縮していることを確認したい場合は、圧縮されていないSOAPリクエストを拒否することもできます。(人気のあるソフトウェアQ&Aサイトがこれを行います。)
空白を削除し、転送中にコンテンツをgzipで圧縮します。
header('Content-Encoding: gzip');
$xml=new DOMDocument($soap);
$xml->preserveWhiteSpace(FALSE);
echo $xml->saveXML();