C\#.NET 프레임 워 크 의 XmlTextReader 클래스 를 통 해 XML 을 읽 는 방법

4641 단어 C#XML
XmlTextReader 는 XML 데이터 흐름 에 대한 읽 기 전용 접근 을 제공 합 니 다.현재 노드 는 리더 가 위치 한 노드 를 가리킨다.모든 읽 기 방법 을 사용 하여 읽 기 를 추진 하고 현재 노드 의 값 을 속성 으로 반영 합 니 다.
이 는 XmlReader 를 실현 하고 W3C 확장 가능 한 태그 언어(XML)1.0 과'XML 의 네 임 스페이스'제안 에 부합 합 니 다.XmlTextReader 는 다음 과 같은 기능 을 제공 합 니 다.
형식 이 좋 은 XML 규칙 을 실행 합 니 다
  • XmlTextReader 는 데이터 검증 을 제공 하지 않 습 니 다
  • 4.567917.DocumentType 노드 가 형식 이 좋 은 지 확인 합 니 다.XmlTextReader 는 DTD 의 형식 이 정확 한 지 확인 하지만 DTD 를 사용 하지 않 습 니 다
  • NodeType 이 XmlNodeType.EntityReference 인 노드 에 대해 하나의 빈 EntityReference 노드(즉 Value 속성 은 String.Empty)를 되 돌려 줍 니 다
  • 기본 속성 을 펼 치지 않 습 니 다.
  • XmlTextReader 는 데이터 검증 에 필요 한 추가 검 사 를 수행 하지 않 기 때문에 빠 른 형식의 정확성 분석 기 를 제공 합 니 다.
    데이터 검증 을 수행 하려 면 검증 XmlReader 를 사용 하 십시오.더 많은 정 보 는 XmlReader 를 사용 하여 XML 데 이 터 를 검증 하 는 것 을 참조 하 십시오.
    XmlDocument 에서 XML 데 이 터 를 읽 으 려 면 XmlNodeReader 를 사용 하 십시오.
    XmlTextReader 는 XML 분석 오류 가 발생 했 을 때 XmlException 을 일 으 킵 니 다.이상 을 일 으 킨 후 리더 의 상 태 는 예측 할 수 없다.예 를 들 어 보고서 의 노드 유형 은 현재 노드 의 실제 노드 유형 과 다 를 수 있 습 니 다.ReadState 속성 을 사용 하면 리더 가 잘못된 상태 인지 확인 할 수 있 습 니 다.
    XmlReader 류 에 대한 추가 논술 은 XmlReader 로 XML 을 읽 는 것 을 참조 하 십시오.
    안전 주의사항:
  • 다음은 XmlTextReader 클래스 를 사용 할 때의 주의사항 입 니 다
  • XmlTextReader 로 인 한 이상 은 프로그램 에 거품 을 일 으 키 지 않 으 려 는 경로 정 보 를 누설 할 수 있 습 니 다.응용 프로그램 은 반드시 이상 을 포착 하고 상응하는 처 리 를 해 야 한다
  • DTD 처 리 는 기본적으로 활성화 되 어 있 습 니 다.서비스 거부 문제 가 발생 하거나 신뢰 하지 않 는 원본 을 처리 하고 있 을 까 봐 DTD 처 리 를 비활성화 해 야 합 니 다.ProhibitDtd 속성 을 true 로 설정 하면 DTD 처 리 를 비활성화 할 수 있 습 니 다
  • DTD 처 리 를 사용 하면 XmlSecureResolver 를 사용 하여 XmlTextReader 가 접근 할 수 있 는 자원 을 제한 할 수 있 습 니 다.XML 처리 가 메모리 와 시간의 제약 을 받 도록 프로그램 도 설계 할 수 있다.예 를 들 어 ASP.NET 프로그램 에 시간 제한 을 설정 합 니 다
  • XML 데 이 터 는 DTD 파일 등 외부 자원 에 대한 인용 을 포함 할 수 있 습 니 다.기본적으로 사용자 증거 가 없 는 XmlUrl Resolver 대상 을 사용 하여 외부 자원 을 분석 합 니 다.다음 작업 중 하 나 를 실행 하면 이 작업 을 더욱 안전 하 게 할 수 있 습 니 다.
  • XmlResolver 속성 을 XmlSecureResolver 대상 으로 설정 하여 XmlTextReader 가 접근 할 수 있 는 자원 을 제한 합 니 다
  • XmlResolver 속성 을 빈 참조 로 설정 함으로써(Visual Basic 에서 Nothing)XmlReader 가 외부 자원 을 열 수 없습니다
  • XML 데 이 터 는 많은 시간 이 걸 려 야 처리 할 수 있 는 속성,네 임 스페이스 성명,내장 요소 등 을 포함 할 수 있 습 니 다.XmlTextReader 에 보 내 는 입력 크기 를 제한 하려 면 사용자 정의 ISTream 을 만 들 고 XmlTextReader 를 제공 하 십시오
  • 4.567917.ReadValueChunk 방법 은 큰 데이터 흐름 을 처리 하 는 데 사용 할 수 있 습 니 다.이 방법 은 전체 값 에 문자열 을 할당 하 는 것 이 아니 라 소량의 문 자 를 한 번 에 읽 습 니 다4.567917.기본 적 인 상황 에서 일반적인 실 체 를 펼 치지 않 습 니 다.ResolveEntity 방법 을 호출 할 때 일반적인 실 체 를 엽 니 다예시:
    XmlTextReader 를 사용 하여 xml 문 서 를 처음부터 끝까지 읽 으 면 대량의 데이터 읽 기 에 적합 합 니 다.
    
    static void Main(string[] args) 
        { 
          XmlTextReader reader; 
     
          if (File.Exists("student.xml"))//       ,     
          { 
            reader = new XmlTextReader("student.xml"); 
          } 
          else//   
          { 
            return; 
          } 
     
          int count = 0; 
          while (reader.Read())//      
          { 
            if (reader.Name == "student") 
            { 
              //             
              Console.WriteLine(reader.GetAttribute("id") + " " + reader.GetAttribute("age") + " " + reader.ReadString()); 
              count++; 
            } 
          } 
          reader.Close();//      
          Console.WriteLine("Count is " + count); 
          Console.ReadKey(); 
        } 
    
    201648170644727.jpg (163×134)
     
    물론 xml 문서 로 구조 적 으로 읽 을 수도 있 지만 읽 기 전 시스템 은 전체 문서 의 구 조 를 가 져 옵 니 다.
    
    static void Main(string[] args) 
        { 
          XmlDocument doc = new XmlDocument(); 
     
          if (File.Exists("student.xml"))//       ,     
          { 
            doc.Load("student.xml"); 
          } 
          else//   
          { 
            Console.WriteLine("     !"); 
            Console.ReadKey(); 
            return; 
          } 
     
          XmlNodeList list = doc.DocumentElement.SelectNodes("student");//           ,  XmlNodeList  
     
          foreach (XmlNode node in list)// list        
          { 
            XmlElement ele = (XmlElement)node;//                ,      element        
            Console.WriteLine(ele.GetAttribute("id") + " " + ele.GetAttribute("age") + " " + ele.InnerText);//    /   
          } 
     
          Console.ReadKey(); 
        } 
    
    201648170731876.jpg (281×164)
     실행 효과 가 똑 같 습 니 다.

    좋은 웹페이지 즐겨찾기