2012-06-14 6 views
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> 

이 부풀게의 엄청난 금액을 절약 할 수 다음과 같이 생성 된 XML 인덱스를 노드 이름을 수있는 방법이 있나요.

편집
이 데이터는 Entity Framework 개체에서 serialize됩니다. XML을 프로토콜로 선택하는 이유는 엔티티가 순환 참조를 우회하기 위해 FromXml 및 ToXml의 .NET 및 스마트 코드 생성이 본질적으로 지원 되었기 때문입니다.

+1

이렇게하면 압축을 다시 실행 취소 할 수있는 방법이없는 한 이해가되지 않습니다. 전체 파일은 태그 대신 임의의 문자로 완전한 엉망이됩니다. – OptimusCrime

+3

GZip 콘텐츠를보다 간단하게 보입니다. XML 노드 이름을 변경하면 XML 내용의 의미가 변경됩니다. –

+0

걱정되는 팽창은 어디에서 오는거야? 디스크에 저장 (압축), 전송 (압축) 또는 메모리에서 처리 될 때입니까? – paul

답변

0

에 비해

4

클라이언트와 서버간에 데이터 스트림을 단지 압축/압축 해제하는 것은 어떻습니까? XML 데이터에서 사용자 정의 변환을 수행하는 것보다 구현하기가 쉽고 오류가 발생하기 쉽습니다.

1

요소가 아닌 데이터에 대해 특성을 사용할 수 있습니다. 이 Element의 경우에 당신이 얻을 것이다 반면

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

을 :

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

그것은 엄격하게 올바른 아니지만 당신이 무엇을 달성 할 당신이 속성으로 "성"이 예를 들어, 당신은 얻을 것이다 후.

1

XML의 요점은 데이터 압축/최소화가 필요 없기 때문입니다. 철사가 내려가는 것을 최소화해야하는 경우 잘못된 프로토콜을 사용하는 것이 좋습니다.

분명히 gzip 스트림을 통해이를 전달할 수 있습니다. 그러면 큰 이점을 얻게 될 것입니다.하지만 JSON 또는 심지어 바이너리 형식을 살펴볼 가치가 있습니다.

XML은 사람이 읽을 수 있도록 고안되었으며 가독성을 제거하여 기본적으로 XML을 사용하는 주된 이유 중 하나를 근본적으로 제거합니다. 내가 노드 이름을 이름을 변경하고 프로세스가 될 수 있도록 매핑 요소를 생성하는 작은 클래스를 작성 결국 xml

0

또는, 당신은 또한 더 적은 크기를 취할 것 대신 xmljson을 고려할 수 반대로. 파일 크기가 50MB에서 10MB로 줄어 들었습니다.

파일을 압축하면 다음 단계가되지만 이진 직렬화를 사용하여 얼마나 많은 공간을 사용할 수 있었는지 궁금합니다. 전에 그것을 시도하지 않았습니다.

관련 문제