1

SOAP応答からネットワークに送信されるバイト数を減らす方法はありますか?PHPでnuSoapを使用しており、すべてのノードでxsi:type = "xsd:string"、xsi:type = "xsd:int"を使用しないようにしたいと考えています。それを行う方法はありますか?

よろしくお願いしますc。

4

3 に答える 3

1

有効な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>

お役に立てば幸いです。

于 2010-08-02T08:40:02.263 に答える
0

これを行う通常の方法は、HTTPレイヤーで圧縮を有効にすることです。常にデータを圧縮していることを確認したい場合は、圧縮されていないSOAPリクエストを拒否することもできます。(人気のあるソフトウェアQ&Aサイトがこれを行います。)

于 2010-07-27T10:44:04.727 に答える
0

空白を削除し、転送中にコンテンツをgzipで圧縮します。

header('Content-Encoding: gzip');
$xml=new DOMDocument($soap);
$xml->preserveWhiteSpace(FALSE);
echo $xml->saveXML();
于 2010-08-02T16:41:45.840 に答える