2009-10-04 3 views
0

XML 파일이 너무 커서 DOM 또는 다른 메모리 기반 클래스를 사용할 수 없기 때문에 .NET XmlReader를 사용하고 있습니다. 그러나 XmlReader의 현재 위치에서 xml 계층 구조를 어떻게 든 되돌릴 수 있어야합니다. 그렇게 할 수있는 방법이 있습니까? 때로는 콘텐츠를 검색하기 위해 레벨 1 상위로 다시 걸어 가야합니다. 내가 분석 할 때 일부 XML을 캐시 할 수 있지만 이러한 XML 파일은 큰 XML 파일이므로 XML을 통해 구문 분석 할 때 많은 양의 데이터를 저장할 수 있으므로 잠재적으로 메모리를 초과하거나 성장 속도에 데이터를 추가 할 때 응용 프로그램의 속도가 느려질 수 있습니다. 기억의 구조.하지만 어쩌면 그것은 나의 유일한 의지 일 것이다..net 변환 클래스로 작업하기에는 너무 큰 xml을 어떻게 변환합니까?

이 언어를 사용할 수있는 xml 파서가 있습니까?

+0

도움이 될만한 정보 : 서술형 또는 데이터 중심의 XML 문서입니까? 특히 혼합 된 콘텐츠가 많이 있습니까? 루트 요소를 엔티티로 참조되는 별도의 파일로 분리하거나 자식 요소에 XIncluded하여 별도의 청크로 분리 할 수 ​​있습니까? 가장 중요한 것은이 문제가 시작되지 않도록하는 방법이 있습니까? XML의 생성자가 사용자가 제어 할 수있는 것이고 더 간단한 초기 형식을 멀티플렉싱하거나 사용할 수 있습니까? – brianary

답변

1

현재 요소 스택을 캐시 할 수 있어야하는 것 같습니다. XML 파일의 깊이가 충분히 좁 으면 이 문제가 될 것으로 생각됩니다. 요소의 시작을 읽을 때마다 스택으로 밀어 넣으십시오. 요소의 끝을 읽을 때마다 스택에서 꺼내십시오.

조상 노드에서 필요한 정보는 실제로 알려주지 않았지만 에만 형제가 아닌 조상 노드가 필요합니다.이 노드는 합리적으로 쉽게 작동해야합니다.

<foo attr="value" />과 같은 자기 닫는 요소에주의하십시오. 스택에 밀어 넣고 필요한 처리를 수행 한 다음 별도의 "끝 요소"이벤트가 표시되지 않더라도 다시 팝업해야합니다.

관련 문제