2010-07-15 4 views
3

특정 오류를 건너 뛰고 계속해야하는 가져 오기 파일이 있습니다. 데이터 유형, 최소/최대 길이 및 필수 필드에 대한 오류를 무시하고 싶습니다. 나는 정확하고 잘못된 위치에 서식이없는 항목에 대한 오류를 포착하고 표시하려고합니다.유효성 검사 xml에서 특정 오류 만 catch하는

이 경우 파일에는 사람 모음이 들어 있습니다. 1 : 사람 노드의 간접적 인 아이 노드 I 캐치

에 오류가 있습니다. 2 : 사람 노드 외부의 자식. 3 : A 사람 노드 옆에있는 사람.

나는 오류를 무시하려는 : 1 : 아동은 이름이 없습니다. 2 : 사람에게 생년월일이 없습니다.

<xs:element name="People"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element name="Person" minOccurs="1" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:all> 
      <xs:element name="FirstName" minOccurs="1" maxOccurs="1"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
       <xs:minLength value="1"/> 
       </xs:restriction> 
      </xs:simpleType> 
      </xs:element> 
      <xs:element name="LastName" minOccurs="1" maxOccurs="1"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
       <xs:minLength value="1"/> 
       </xs:restriction> 
      </xs:simpleType> 
      </xs:element> 
      <xs:element name="BirthDate" type="Date" minOccurs="1" maxOccurs="1"/>    
      <xs:element name="Children"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="Child" minOccurs="1" maxOccurs="unbounded"> 
        <xs:complexType> 
        <xs:all> 
         <xs:element name="FirstName" minOccurs="0" maxOccurs="1"> 
         <xs:simpleType> 
          <xs:restriction base="xs:string"> 
          <xs:minLength value="1"/> 
          </xs:restriction> 
         </xs:simpleType> 
         </xs:element> 
         <xs:element name="BirthDate" type="Date" minOccurs="1" maxOccurs="1"/>    
         </xs:all> 
        </xs:complexType> 
       </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:all> 
     </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
</xs:complexType> 

답변

0

변경 스키마를 다음과 같이 아이에서 FIRSTNAME 요소 선언에서

  • 는 = "문자열 XS"을 입력 속성을 추가 할 수 있습니다. 또한 요소 선언의 모든 내용을 제거하십시오 (simpleType 등). 원하는 경우 태그를 자동으로 닫을 수 있습니다. 생년월일 요소 선언
  • 는, 제 1 변화는 현재 컨텐츠는 적어도 하나 개의 문자 길이 인 것이 아이의 이름에 놓여있어 제한을 제거 0

1에서는 minOccurs 변경. 요소 유형의 현재 정의를 제거하기 때문에 type 속성을 추가해야합니다.

두 번째 변경 사항은 생년월일이 필요 없다는 것을 유효성 검사기에 알려줍니다.

유효성을 검사하려는 XML과 변경 내용을 확인하십시오.

+0

감사합니다.하지만 해당 항목은 그대로두고 싶습니다. 파일을 만드는 사람이 어떤 필드가 필요한지 확인해야합니다. 그러나 파일을 가져올 때 항목 중 일부를 무시해야합니다. 내가 실행중인 문제는 유효성 검사에서 호출되는 ValidationCallBack 이벤트가 어떤 종류의 오류가 발생 하는지를 알 수있는 방법이 없다는 것입니다. 그래서 스키마를 변경하고 싶지는 않지만 유효성 검사 콜백 메서드를 수정하여 어떤 오류가 발생하는지 확인하고 읽을 수 있도록하거나 유효성 검사 콜백을 통해 내가 결정한 오류를 호출해야합니다. 파국적 인. – Irimis

0

유효하지 않은 입력이 표시 될 때 중단하거나 계속 수행할지 여부는 원칙적으로 완전히 소모 소프트웨어의 선택이므로 설명하는 내용은 논리적으로 일관성이 있습니다. 사용중인 API를 통해 필요한 정보를 얻을 수 있다면 설명대로 소프트웨어를 작동하지 않을 이유가 없습니다. 이는 아마도 바람직한 옵션 일 것입니다. (그러나 나는 당신을 도울 수 없습니다.)

API를 통해 필요한 정보를 얻을 수없는 경우 (일부 API는 유효성 검사가 예/아니오 종류라고 가정합니다), 가능한 대체 대안 ssamuel의 대답에 설명 된대로 별개의 스키마를 사용하여 유효성을 검사하는 것이므로 유효성 오류는 치명적인 것으로 간주됩니다.

즉, 다음과 같은 두 가지 방법으로 문제를 해결할 수 있습니다. (1) 유효하지 않은 입력을 항상 중단해야한다는 아이디어를 지나치십시오. 중지 또는 계속할 수 있도록 자세한 정보를 제공하는 유효성 검사기를 가져옵니다. 또는 (2) 문서의 모든 처리에 적용되는 단일 스키마가 있음을 전제로합니다. 문서 작성에 하나의 스키마를 사용하고 입력으로 수행 할 작업을 결정하기 위해 다른 스키마를 사용합니다.