또한 SAX 파서를 사용하면 식별되지 않은 태그및 특성이 무시되므로 이전 버전과의 호환성을 쉽게 구현할 수 있습니다. 또한 부분적으로 불법 XML 파일의 구문 분석도 허용합니다. 예를 들어 각 연락처 태그의 열기만 필요합니다. 첫 번째 부분은 간단합니다. 코드는 예제 9-2에 나와 있습니다. «AdBookML»은 마크업 컨벤션의 이름입니다. 세 번째 부분의 경우 함수가 사용됩니다: ContactToNode. 실시예 9-4에 도시되어 있다. Qt의 SAX는 QXmlSimpleReader 및 QXmlDefaultHandler의 사용자 지정 하위 클래스를 사용하여 구현하는 것이 가장 쉽습니다. 기본 처리기에는 문서가 시작되거나 요소가 열리거나 닫히면 판독기에 의해 호출되는 메서드가 있습니다.
당사의 처리기는 예제 9-10에 표시되며 고객 정보를 수집하고 애드북 태그 안에 있는지 여부라는 두 가지 목적이 있습니다. 세 번째 단계와 네 번째 단계는 루프에 결합됩니다. 각 요소는 연락처인 경우 특성이 분석되고 그렇지 않으면 무시됩니다. 특성 메서드는 기본값을 허용하므로 특성이 누락된 경우 빈 문자열을 얻습니다. 이에 대한 코드는 예제 9-9에 있습니다. 위의 설명에 따라 다음 섹션에서 쿡북 XML 파일을 읽는 방법을 보여 드리겠습니다. XML 파일을 구문 분석하는 클래스 XmlCookBookReader를 만들려고 합니다. 또한 쿡북과 레시피 클래스를 만들고 구문 분석 된 정보로 채울 것입니다. 위의 예제와 달리 입력 파일에는 특성 `title`도 포함되어 있습니다. 업그레이드는 연락처 클래스의 변경으로 시작됩니다. QDomElement에서 연락처를 만들기 위한 생성자와 빈 연락처를 만들기 위한 생성자가 있습니다.
현재 연락처에서 QDomElement를 만드는 메서드도 있습니다. 헤더는 예제 9-12에 표시되고 구현은 예제 9-13에 있습니다. 구현은 contact.cpp라는 새 파일에 배치됩니다. 파일이 로드되면 다음 예제에 따라 첫 번째 노드(루트라고 함)를 읽을 수 있습니다. 이것은 주로 단순성 때문이며 주로 이러한 파일은 인간과 기계가 읽을 수 있기 때문입니다. 이 문서에서는 Qt를 통해 XML 파일 읽기의 예를 보여 주며 있습니다. 첫 번째 부분은 예제 9-7에서 코드로 표시됩니다. 빈 문서가 비워지고 파일 내용이 할당됩니다(파일이 제대로 열리는 경우). 이렇게 하면 전체 문서를 메모리로 읽으면 파일을 삭제할 수 있습니다. 루트 요소가 필요한 이유는 무엇입니까? 이것은 시작 지점을 가지고하는 것입니다.
우리의 루트 요소는 애드북이라고합니다. 이것은 예제 9-3의 코드에서 만들어집니다. 이 예제에서는 이전 자습서에서 만든 다음 XML 문서에서 읽었습니다: QtXML – 파일에 쓰기. 마지막으로 다음 예제에 따라 전체 데이터를 읽을 수 있습니다. 그런 다음 «애드북» 요소인지 확인합니다. 이에 대한 코드는 예 9-8입니다. 파일의 로드 및 저장을 처리하기 위해 frmMain 클래스에 두 가지 새로운 메서드가 추가됩니다. 명령줄 인수를 용이하게 하기 위해 설계되었으며 사용자 인터페이스와 파일을 저장하거나 로드하는 방법을 사용하는 방법과는 아무 관련이 없습니다. 구현은 DOM 읽기 및 쓰기를 양보하는 이전 섹션에서 다소 복사됩니다. 차이점은 연락처 및 목록 보기의 컬렉션을 조작하고 예기치 않은 일이 발생할 때 더 나은 사용자 피드백을 제공한다는 것입니다. 이에 대한 코드는 예제 9-14에서 찾을 수 있습니다. 그거에요! 예제를 사용해 볼 수 있습니다.
다음과 같은 출력을 얻을 수 있습니다: 전체 구현은 아래에서 볼 수 있습니다.