이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 13040|회답: 2

[C++] C++가 XML 파일 데이터를 파싱할 때 파생 클래스 객체 데이터를 덤프하는 기법들...

[링크 복사]
게시됨 2019. 1. 16. 오전 9:22:59 | | | |
이 게시물은 2019-1-16 09:31에 Summer가 마지막으로 편집했습니다

1. 이 글에서 해결해야 할 기술적 문제는 무엇인가요?

기존 기술에서 문제를 해결하자면, C++ 언어로 XML 문서를 파싱할 때, 원본 XML 문서에 나타나는 기본 클래스 태그 파생 클래스 데이터는 기존 파싱 방법에 따른 기본 클래스 타입에 따라서만 파싱할 수 있지만, 파생 클래스 데이터는 완전히 파싱할 수 없다는 점입니다.


2. 기술 배경

기존의 기술에서는 boost::serialization을 사용해 기본 클래스 포인터로 파생 클래스를 전송하거나 매크로BOOST_CLASS_EXPORT 사용하세요.

기존 기술에서 위의 두 방식 모두 추상 클래스 메커니즘에 기반하지만, 추상 클래스는 구체적인 객체로 인스턴스화할 수 없기 때문에 XML 문서에서 기본 클래스로 선언된 객체는 파싱할 수 없습니다. 본 발명은 기본 클래스 객체 자체와 그 객체에 의해 표시된 파생 클래스 객체의 데이터가 올바르게 파싱되고 완전히 보존될 수 있도록 보장하는 것을 목적으로 합니다.


3. 이 문서에서 제공하는 기술 체계

본 논문은 추상 클래스 메커니즘을 사용하지 않고, 기본 클래스가 호출한 클래스에 기본 클래스 포인터를 도입하고, 기본 클래스 파싱 함수를 가상 함수로 선언하며, 파싱 과정에서 기본 클래스 포인터를 통해 파싱 함수를 호출하여 다형성을 적용하여 데이터를 동적으로 파싱하고 저장하고, 최종적으로 기본 클래스 객체와 그 클래스에서 파생된 파생 클래스 객체의 데이터가 기본 클래스 정의된 포인터에 저장될 수 있도록 보장합니다.
구체적인 단계:
1단계: C++ 코드로 파싱할 XML 문서의 데이터 태그에 대응할 수 있는 모든 클래스를 설계하고, 최상위 태그에서 XML 데이터를 하나씩 파싱합니다.
2단계: 각 파싱된 태그에 대해, 그 태그를 기본 클래스로 상속하는 다른 태그가 있는지 판단합니다. 즉, 태그 타입이 다른 타입을 파생시키는지 여부입니다;
3단계: 현재 태그가 기본 클래스로 상속되지 않은 것으로 판단되면, 일반적인 파싱 단계에 따라 현재 태그를 파싱합니다.
4단계: 현재 태그가 기본 클래스로 상속된 것으로 판단되면, 기본 클래스 태그가 설명하는 내용이 기본 클래스 객체에 종속적인지 파생 클래스 객체에 종속적인지 추가 확인;
5단계: 현재 기본 클래스 태그의 내용이 기본 클래스 객체를 설명하는 것으로 판단되면, 일반적인 단계에 따라 현재 태그를 파싱합니다.
6단계: 현재 기본 클래스 태그 내용이 파생 클래스 객체를 설명하고 있다면, 새로운 파싱 방법에 따라 코드를 파싱하도록 수정하세요: 이전 타입의 기본 클래스 객체를 정의한 데이터 구조를 수정하고 대신 기본 클래스 포인터를 정의합니다; 기본 클래스 파싱 함수를 수정하고 이를 가상 함수로 선언하세요;
7단계: 원래 파싱용으로 정의된 기본 클래스 객체는 대신 기본 클래스 포인터를 정의하고, 라벨 내용에 따라 특정 메모리 유형을 할당하며, 기본 클래스 포인터를 사용해 현재 라벨을 파싱하는 파싱 함수를 호출합니다.
8단계: 현재 태그를 파싱하고 재생하여 아직 파싱할 태그가 있는지 확인합니다;
9단계: 파싱할 태그가 없다고 판단되면, 파싱이 완료되어 데이터가 C++ 클래스에서 해당 XML 문서의 가장 높은 라벨을 가진 클래스에 저장되었음을 의미합니다.
10단계: 아직 해결되지 않은 태그가 있다고 판단되면 2단계에 따라 다음 태그를 파싱합니다.

플로우차트 첨부

4. 요약

C++는 기본 클래스 포인터를 도입하여 해당 타입의 객체를 XML 태그 콘텐츠에 할당하고, 정의된 기본 클래스 포인터를 사용해 가상의 함수로 선언된 파싱 함수를 호출하여 XML 기본 클래스 태그 내용을 파싱합니다. 이렇게 하면 XML 기본 클래스 태그가 기본 클래스 객체 데이터를 설명할 때, C++의 다형성에 따라 기본 클래스 파싱 함수가 동적으로 호출되고, 기본 클래스 태그로 설명된 기본 클래스 데이터는 올바르게 파싱되고 보존될 수 있습니다. XML 기본 클래스 태그가 파생 클래스 객체 데이터를 설명할 때, C++의 다형성에 따라 파생 클래스 파싱 함수가 동적으로 호출되며, 기본 클래스 태그로 설명된 파생 클래스 데이터도 올바르게 파싱 및 보존될 수 있습니다.





이전의:안드로이드/PC용 QQ 프로토콜 분석 튜토리얼
다음:데몬 스피릿 소환 V4.1.8은 조용히 사용됩니다
게시됨 2019. 1. 16. 오전 9:26:40 |
플로우차트는 사라졌다
 집주인| 게시됨 2019. 1. 16. 오전 9:31:49 |
2019-1-16 09:26에 게시됨
플로우차트는 사라졌다

플로우차트가 덧붙여 있죠
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com