??속성값 분석
??대부분의 경우 속성값은 간단한 텍스트 문자열입니다. 그러나 실제 애플리케이션의 속성값이 모두 문자형이라는 뜻은 아니다. 특성 값이 Date 또는 Boolean과 같은 여러 유형의 데이터 조합인 경우도 있습니다. 이 경우 XmlConvert 또는 System.Convevt 클래스 메서드를 사용하여 이러한 유형을 원래 유형으로 변환해야 합니다. XmlConvert 및 System.Convevt 클래스는 모두 데이터 형식 변환을 구현할 수 있지만 XmlConvert 클래스는 현재 형식에 관계없이 XSD에 지정된 데이터 형식을 기반으로 변환합니다.
?? 다음 XML 데이터 조각이 있다고 가정합니다.
?? 먼저 birthdaydaay 속성 값이 2001년 2월 8일인지 확인하겠습니다. use System.Convert 클래스는 문자열을 .NET Framework에서 DateTime 유형으로 변환하므로 이를 날짜 유형으로 사용할 수 있습니다. 반면에 XmlConvert 클래스를 사용하여 문자열을 변환하면 XmlConvert 클래스가 문자열의 날짜를 정확하게 해석할 수 없기 때문에 구문 분석 오류가 발생합니다. 왜냐하면 XML에서는 날짜 데이터의 형식이 YYYY-MM-DD 형식이어야 하기 때문입니다. XmlConvert 클래스는 CLR 유형과 XSD 유형 간의 상호 변환을 담당합니다. 변환 작업이 발생하면 변환 결과는 부분적입니다.
일부 솔루션에서는 속성 값이 일반 텍스트와 엔터티로 구성됩니다. 모든 브라우저 클래스 중에서 XmlValidatingReader 클래스만 엔터티를 처리할 수 있습니다. XmlTextReader는 엔터티를 처리할 수 없지만 속성 값에 동시에 나타날 때만 텍스트 값을 꺼낼 수 있습니다. 이 경우 속성 값의 내용을 분석하려면 단순 읽기 메서드 대신 ReadAttributeValue 메서드를 사용해야 합니다.
??ReadAttributeValue 메서드는 속성 값을 분석한 다음 각 구성 요소 요소를 분리합니다(예: 일반 텍스트와 엔터티 분리). ReadAttributeValue 메서드의 반환 값을 루프 조건으로 사용하여 모든 특성 값의 요소를 순회할 수 있습니다. XmlTextReader 클래스는 엔터티를 처리할 수 없으므로 엔터티를 처리하기 위한 클래스를 직접 작성할 수 있습니다. 다음 코드 조각은 사용자 정의 처리 클래스를 호출하는 방법을 보여줍니다.
??while(reader.ReadAttributeValue())
??{
??if( reader. NodeType == ??buf = YourResolverCode(reader.Name);
??else
??// 버퍼에 값을 추가하세요
??buf = reader.Value ;
??}
??모든 속성 값이 분석되면 ReadAtributeValue 메서드가 False를 반환하여 루프를 종료합니다. 속성 값의 최종 결과는 전역 변수 버퍼의 값입니다.
??XML 텍스트(텍스트) 처리
??XML 태그 텍스트를 처리할 때 정확하게 처리할 수 없는 경우 오류의 원인을 빠르게 파악할 수 있습니다. 예를 들어 문자 변환 오류가 발생하면 비XML 텍스트를 XML 데이터 스트림으로 전송해야 합니다. 특정 플랫폼에서 유효한 모든 문자가 유효한 XML 문자는 아닙니다. XML 사양(www.w3.org/TR/2000/REC-xml-20001006.html)에 지정된 유효한 문자만 요소 및 속성 이름으로 안전하게 사용할 수 있습니다.
XmlConvert 클래스는 비XML 표준 이름을 표준 XML 이름으로 변환하는 기능을 제공합니다. 태그 이름에 잘못된 XML 문자가 포함된 경우 EncodeName 및 DecodeName 메서드는 해당 문자를 스키마 호환 XML 이름으로 조정할 수 있습니다. SQL Server™ 및 Microsoft Office를 포함하여 이러한 응용 프로그램은 유니코드 문서를 허용하고 지원하지만 이러한 문서의 일부 문자는 유효한 XML 이름이 아닙니다. 일반적인 상황은 공백이 포함된 데이터베이스의 열 이름을 처리하는 경우입니다. SQL Server에서는 긴 열 이름을 허용하지만 이는 XML 스트림에 유효한 이름이 아닐 수 있습니다. 공백은 16진수 코드 Invoice_0x0020_Details로 대체됩니다. 다음 코드는 프로그램에서 문자열을 얻는 방법을 보여줍니다.
??XmlConvert.EncodeName('Invoice Details');
??반대 방법은 DecodeName입니다. 이 메서드는 XML 텍스트를 원래 형식으로 변환합니다. 완전한 16진수 코드만 변환할 수 있으며 _0x0020_만 공백으로 처리되고 _0x20_은 공백으로 처리되지 않습니다.
??XmlConvert.DecodeName('Invoice_0x0020_Details')
?? XML 문서는 중요하거나 중요하지 않습니다. 요소의 내용에 나타나거나 주석문에 있을 때 실제 의미를 표현할 수 있기 때문에 중요합니다. 예를 들어 다음과 같은 상황은
??
??