0

データが XML 形式で交換されるクライアント/サーバー アプリケーションがあります。データのサイズは約 50MB になり、そのほとんどは XML タグ自体で構成されます。生成された XML を取得し、次のようにノード名にインデックスを付ける方法はありますか。

<User><Assessments><Assessment ID="1" Name="some name" /></Assessments></User>

に:

<A><B><C ID="1" Name="some name" /></B></A>

これにより、信じられないほどの量の肥大化を防ぐことができます。

EDIT
このデータは、Entity Framework オブジェクトからシリアル化されます。プロトコルとして XML を選択した理由は、.NET の組み込みサポートと、エンティティが循環参照を回避するための FromXml および ToXml のスマート コード生成でした。

4

5 に答える 5

4

クライアントとサーバーの間でデータストリームを圧縮/解凍するだけではどうですか? これは、xml データに対してカスタム変換を行うよりも実装が簡単で、エラーが発生しにくくなります。

于 2012-06-14T11:53:36.410 に答える
1

XML のポイントは、データを圧縮/最小化する必要がないようにすることです。ネットワークに流れるものを最小限に抑える必要がある場合は、間違ったプロトコルを使用している可能性が高くなります。

明らかに、これを gzip ストリームを介して渡すことができます。これにより大きな利点が得られますが、それ以上のものを絞り出したい場合は、JSON またはバイナリ形式を検討する価値があるかもしれません。

XML は人間が判読できるように設計されており、可読性を取り除くことで、そもそも XML を使用する主な理由の 1 つを本質的に取り除くことができます。

于 2012-06-14T11:58:06.223 に答える
1

要素ではなく、データに属性を使用することを検討できます。たとえば、属性として「性別」がある場合、次のようになります。

<person gender="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

一方、要素の場合は次のようになります。

<person>
  <gender>female</gender>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

それは厳密には正しくありませんが、あなたが求めているものを達成します。

于 2012-06-14T11:54:56.193 に答える
0

jsonまたは、の代わりに検討することもできますxml。これは、xml

于 2012-06-14T12:06:51.540 に答える
0

ノード名の名前を変更し、マッピング要素を作成する小さなクラスを作成して、プロセスを逆にすることもできました。それだけで、ファイル サイズが 50MB から 10MB に減少しました。

ファイルの圧縮は次のステップですが、バイナリ シリアライゼーションを使用してどれだけのスペースを確保できるか疑問に思っています。以前にそれを試したことはありません。

于 2012-06-17T07:26:48.000 に答える