집 >백엔드 개발 >C#.Net 튜토리얼 >.NET Framework에서 XML 데이터를 쉽게 처리(1-2)
?XmlReader 클래스
??XML 브라우저는 XML 문서에 연결하고 원하는 데이터를 "꺼내는" 데 사용되는 프로그래밍 인터페이스를 지원합니다. 브라우저를 더 깊이 이해한다면 브라우저가 데스크탑 애플리케이션이 데이터베이스에서 데이터를 검색하는 방식과 유사하게 작동한다는 것을 알게 될 것입니다. 데이터베이스 서비스는 모든 쿼리 결과 세트를 포함하는 커서 개체를 반환하고 대상 데이터 세트의 시작 주소에 대한 참조를 반환합니다. XML 브라우저의 클라이언트는 브라우저 인스턴스에 대한 참조를 받습니다. 이 예에서는 기본 데이터 스트림을 추출하고 검색된 데이터를 XML 트리로 표시합니다. 브라우저 클래스는 읽기 전용 앞으로 커서를 제공하며 브라우저 클래스에서 제공하는 메서드를 사용하여 커서를 회전하고 결과 집합의 각 데이터 부분을 탐색할 수 있습니다.
?? 브라우저에서 보면 XML 문서는 태그된 텍스트 파일이 아니라 직렬화된 노드 컬렉션입니다. 이는 .NET Framework의 특수 커서 모드입니다. .NET Framework에서는 다른 유사한 API 기능을 찾을 수 없습니다.
?? 브라우저와 XMLDOM 파서에는 몇 가지 차이점이 있습니다. XML 브라우저는 입력 전용입니다. 부모, 자식, 조상 및 형제 노드에 대한 개념이 없으며 읽기 전용입니다. .NET Framework에서 XML 문서 읽기 및 쓰기는 완전히 다른 두 가지 기능으로 구분되며 각각 XmlReader 및 XmlWriter 클래스에 의해 완료됩니다. XML 문서를 편집하려면 XMLDOM 구문 분석기를 사용하거나 이 두 가지 기능을 달성하도록 클래스를 직접 디자인할 수 있습니다. 브라우저의 프로그램 기능 분석을 시작하겠습니다.
XmlReader는 추상 클래스이므로 해당 기능을 확장할 수 있습니다. 사용자 프로그램은 일반적으로 XmlTextReader, XmlValidatingReader 또는 XmlNodeReader 클래스의 세 가지 범주를 기반으로 합니다. 이러한 모든 클래스에는 그림 1에 표시된 속성과 그림 2에 표시된 메서드가 있습니다. 일부 속성의 값은 실제로 실제 브라우저 클래스에 첨부되며, 다른 클래스는 기본 클래스와 다를 수 있다는 점에 유의해야 합니다. 따라서 그림 1의 각 속성에 대한 설명은 기본 클래스를 기반으로 합니다. 예를 들어 CanResolveEntity 속성은 XmlValidatingReader 클래스에서만 true를 반환하지만 다른 브라우저 클래스에서는 false로 설정할 수 있습니다. 마찬가지로, 그림 2의 일부 메소드의 실제 반환 값은 클래스마다 다를 수 있습니다. 예를 들어 노드 유형이 요소 노드가 아닌 경우 Atrributes를 포함하는 모든 메서드의 반환 값 유형은 void입니다.
??XmlTextReader 클래스는 정방향 전용, 읽기 전용 메서드를 사용하여 XML 데이터 스트림에 빠르게 액세스합니다. 브라우저는 먼저 XML 문서의 형식이 올바른지 확인하고 그렇지 않은 경우 예외를 발생시킵니다. XmlTextReader는 DTD가 올바른 형식인지 확인하지만 문서의 유효성을 검사하기 위해 DTD를 적용하지는 않습니다. XmlTextReader는 파일 이름, URL 또는 파일 스트림을 기준으로 XML 문서를 로드한 다음 XML 문서 데이터를 빠르게 처리합니다. 문서 데이터의 유효성을 검사해야 하는 경우 XmlValidatingReader 클래스를 사용할 수 있습니다.
하드 디스크에서 파일 로드, URL 주소에서 로드, 스트림에서 로드, 텍스트에서 XML 문서 데이터 읽기 등 다양한 방법으로 XmlTextReader 클래스의 인스턴스를 만들 수 있습니다.
??XmlTextReader reader = new XmlTextReader(file);
??XmlTextReader 클래스의 모든 공용(공용) 구조 함수에서는 데이터 소스를 지정해야 하며 데이터 소스는 다음과 같을 수 있습니다. 스트림, 파일 또는 기타. XmlTextReader의 기본 구조 함수는 보호되어 있으므로 직접 적용할 수 없습니다. .NET Framework의 모든 브라우저 클래스(예: SqlDataReader 클래스)와 마찬가지로 브라우저 개체가 연결되고 열리면 Read 메서드를 사용하여 데이터에 액세스할 수 있습니다. 처음에는 Read 메서드만 사용하여 포인터를 첫 번째 요소로 이동할 수 있습니다. 그런 다음 Read 메서드나 다른 메서드(예: Skip, MoveToContent 및 ReadInnerXml)를 사용하여 포인터를 다음 노드 요소로 이동할 수 있습니다. 전체 XML 문서의 내용을 처리하려면 Read 메서드의 반환 값을 기반으로 루프를 사용하여 문서 내용을 순회하면 됩니다. Read 메서드는 부울 값을 반환하므로 문서의 꼬리 노드를 읽을 때 읽기 메서드는 false를 반환하고, 그렇지 않으면 true를 반환합니다.
??그림 3 XML 문서 노드 레이아웃 출력
??string GetXmlFileNodeLayout(string file)
??{
??// Create XmlTextReader 클래스는 대상 XML 문서를 가리킵니다
?? ?StringWriter 작가 = new StringWriter()
??string tabPrefix =
??while (reader.Read())
??{
??// 노드 유형이
??if (reader.NodeType == XmlNodeType.Element)
??{
??인 경우 시작 태그 쓰기 //요소가 위치한 노드의 깊이에 따라 reader.Depth 탭 문자를 추가한 후 <>에 요소명을 씁니다.
??tabPrefix = new string('t', reader.Depth);
??writer.WriteLine('{0}<{1}>', tabPrefix, reader.Name); >??}
??else
??{
??//노드 유형이
??if 요소인 경우 종료 태그를 작성합니다. (reader.NodeType == XmlNodeType.EndElement)
??{
??tabPrefix = new string('t', reader.Depth)
??writer.WriteLine('{0}', tabPrefix, reader.Name)
??}
??}
??}
??// 화면에 출력
??string buf =writer.ToString();
??writer.Close()
??// 닫힌 스트림
??reader.Close(); >
??return buf;
??}
??그림 3은 주어진 XML 문서의 노드 요소를 출력하는 간단한 함수를 보여줍니다. 이 함수는 먼저 XML 문서를 연 다음 루프를 사용하여 XML 문서의 모든 내용을 처리합니다. Read 메서드가 호출될 때마다 브라우저의 포인터가 한 노드 아래로 이동합니다. 대부분의 경우 Read 메서드는 요소 노드를 처리할 수 있지만 때로는 한 노드에서 다음 노드로 이동할 때 두 가지 다른 유형의 노드 사이를 이동할 수 있습니다. 그러나 Read 메서드는 특성 노드 간에 이동할 수 없습니다. 브라우저의 MoveToContent 메서드를 사용하면 포인터가 헤드 노드 위치에서 첫 번째 콘텐츠 노드 위치로 이동할 수 있습니다. Skip 메서드를 사용하여 ProcessInstruction, DocumentType, Comment, Whitespace 및 SignificantWhitespace 유형 노드에서 포인터를 이동할 수도 있습니다.
위 내용은 .NET Framework에서 XML 데이터를 쉽게 처리하는 내용(1-2)입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!