??XmlReadWriter 클래스 설계
??앞서 언급했듯이 XML 판독기와 작성기는 독립적으로 작동합니다. 판독기는 읽기만 하고 쓰기만 합니다. 애플리케이션이 긴 XML 문서를 처리해야 하는데 문서에 불안정한 데이터가 있다고 가정해 보겠습니다. Reader는 문서의 내용을 읽는 좋은 방법을 제공합니다. 반면에 Writer는 XML 문서 조각을 만드는 데 매우 유용한 도구이지만 읽고 쓸 수 있게 하려면 XMLDOM을 사용해야 합니다. 실제 XML 문서가 매우 큰 경우 다른 제목이 표시됩니다. 이 모든 XML 문서를 메모리에 로드한 다음 나중에 읽고 써야 할까요? 먼저 대규모 XML DOM을 구문 분석하기 위한 하이브리드 스트림 분석기를 구축하는 방법을 살펴보겠습니다.
일반적인 읽기 전용 작업과 마찬가지로 일반 XML 리더를 사용하여 노드에 순차적으로 액세스합니다. 차이점은 XML 작성기를 사용하여 읽는 동안 속성 값과 노드 내용을 변경할 수 있다는 것입니다. 리더를 사용하여 소스 파일의 각 노드를 읽고 백그라운드 기록기가 노드의 복사본을 만듭니다. 이 복사본에서는 일부 새 노드를 추가하고, 다른 노드를 무시하거나 편집하고, 속성 값을 편집할 수 있습니다. 변경이 완료되면 이전 문서를 새 문서로 바꿉니다.
?? 간단하고 효과적인 방법은 읽기 전용 스트림에서 쓰기 스트림으로 노드 개체를 복사하는 것입니다. 이 방법은 XmlTextWriter 클래스에서 WriteAttributes 메서드와 WriteNode 메서드의 두 가지 메서드를 사용할 수 있습니다. WriteAttributes 메서드는 현재 판독기에서 선택된 노드의 유효한 특성을 모두 읽은 다음 해당 특성을 현재 출력 스트림에 별도의 문자열로 복사합니다. 마찬가지로 WriteNode 메서드는 유사한 메서드를 사용하여 특성 노드를 제외한 다른 유형의 노드를 처리합니다. 그림 10에 표시된 코드 조각은 위의 두 가지 방법을 사용하여 소스 XML 문서의 복사본을 만들고 특정 노드를 선택적으로 수정하는 방법을 보여줍니다. XML 트리는 트리 루트부터 액세스되지만 속성 노드 유형이 아닌 다른 유형의 노드만 출력됩니다. Reader와 Writer를 새 클래스에 통합하고 스트림을 읽고 쓰고 속성과 노드에 액세스할 수 있도록 새 인터페이스를 디자인할 수 있습니다.
그림 10 WriteNode 메서드 사용
XmlTextReader reader = new XmlTextReader(inputFile);
XmlTextWriter Writer = new XmlTextWriter(outputFile) >
//Reader 구성 및 작가
writer.Formatting = Formatting.Indented;
reader.MoveToContent()
// 루트 노드 쓰기
writer.WriteStartElement(reader.LocalName);
// 다른 모든 노드를 읽고 출력합니다.
int i=0; .Read())
{
if (i % 2)
writer.WriteNode(reader, false)
i
}
// 루트를 닫습니다
writer.WriteEndElement()
// 리더를 닫고 writer
writer.Close();
reader.Close();
??내 XmlTextReadWriter 클래스가 XmlWriter 클래스의 XmlReader 또는 Pertant에서 파생되지 않았습니다. 대신 클래스가 두 개 더 있는데, 하나는 읽기 전용 스트림(스트림)을 기반으로 하는 컨트롤 클래스이고, 다른 하나는 쓰기 전용 스트림을 기반으로 하는 컨트롤 클래스입니다. XmlTextReadWriter 클래스의 메서드는 Reader 개체를 사용하여 데이터를 읽고 이를 Writer 개체에 씁니다. 다양한 요구 사항에 적응하기 위해 내부 Reader 및 Writer 개체는 읽기 전용 Reader 및 Writer 속성을 통해 노출됩니다. 그림 11에는 이 클래스의 일부 메서드가 나열되어 있습니다. 그림 11 XmlTextReadWriter 클래스 메서드
메서드
설명
AddAttributeChange
노드 특성을 변경하는 데 필요한 모든 정보를 캐시합니다. 이 메서드를 통해 캐시된 변경 사항은 WriteAttributes에 대한 연속 호출 중에 처리됩니다.
Read
내부 판독기의 Read 메서드에 대한 간단한 래퍼
WriteAttributes
작성기 WriteAttributes의 특수 버전입니다. 메서드는 AddAttributeChange 메서드를 통해 캐시된 모든 변경 사항을 고려하여 지정된 노드에 대한 모든 속성을 기록합니다.
WriteEndDocument
작성기에서 현재 문서를 종료하고 판독기와 기록기를 모두 닫습니다.
WriteStartDocument
문서를 출력하고 기본 주석 텍스트와 표준 XML 프롤로그를 추가하도록 준비합니다.
?? Reader의 읽기 방법을 간단히 캡슐화한 것입니다. 또한 WriterStartDocument 및 WriteEndDocument 메서드를 제공합니다. 내부 Reader 및 Writer 개체를 각각 초기화/해제(완료)하고 모든 I/O 작업도 처리합니다. 루프에서 노드를 읽는 동안 노드를 직접 수정할 수 있습니다. 성능상의 이유로 먼저 AddAttributeChange 메서드를 사용하여 특성을 수정해야 합니다. 노드 특성에 대한 모든 수정 사항은 임시 테이블에 저장됩니다. 마지막으로 WriteAttribute 메서드를 호출하여 수정 사항이 제출되고 임시 테이블이 지워집니다.
위 내용은 .NET Framework에서 XML 데이터를 쉽게 처리하는 내용(5-1)입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!