2013-03-13 2 views
1

나는 다음과 같은 방법에 따라 일부 XML XSD 유효성 검사를했다 : Xml validation using XSD schema'ref'속성을 사용할 수 없습니다. C#에서 유효성 검사 오류는

....................................................... 
XmlReaderSettings settings = new XmlReaderSettings(); 
settings.Schemas.Add(null, xsdFilePath); 
settings.ValidationType = ValidationType.Schema; 
settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler); 
XmlDocument document = new XmlDocument(); 
document.Load(xmlFilePath); 
XmlReader rdr = XmlReader.Create(new StringReader(document.InnerXml), settings); 

while (rdr.Read()) 
{ 

} 
........................................................... 

그리고 그것은 나를 말하는 된 오차 제공 :

내 XSD는 " '심판'속성이 될 수 없다" 보이는 같은 :

........... 
<xs:element name="totals" minOccurs="0" ref="DocTotal"/> 
.................................. 

<xs:element name="DocTotal"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="totalQty" minOccurs="0" type="xs:decimal"/> 
      <xs:element name="totalTax" minOccurs="0" type="xs:decimal"/> 
     </xs:sequence> 
     <xs:attribute name="id" type="xs:string" use="required"/> 
    </xs:complexType> 
</xs:element> 

내 XML은 다음과 같습니다

<totals> 
    <totalQty>800</totalQty> 
    <totalTax>0.00<totalTax> 
</totals> 

나는이 오류 때문에 모두 "이름""REF" 발생 믿습니다 속성은 같은 요소에 존재 :이 (이것에 귀하의 의견을 주셔서 감사합니다) XSD 잘못 아니라고 생각하지만이에 경우 XML이 XSD를 검증 할 수있는 방법이있다 :

+2

그리고이 질문에 "java"라는 태그가 붙어 있기 때문에 ...? –

+0

그것에 대해 미안 해요 – Bathiya

+0

[this] (http://stackoverflow.com/q/8896602/238902) 도움이 될 수도 있습니다 – Default

답변

2

그것은 DocTotal처럼 나에게 보이는이 유형되어야한다,하지 요소 :

<xs:element name="totals" minOccurs="0" type="DocTotal"/> 
.................................. 

<xs:complexType name="DocTotal"> 
    <xs:sequence> 
     <xs:element name="totalQty" minOccurs="0" type="xs:decimal"/> 
     <xs:element name="totalTax" minOccurs="0" type="xs:decimal"/> 
    </xs:sequence> 
    <xs:attribute name="id" type="xs:string" use="required"/> 
</xs:complexType> 

당신이의 구조를 정의하려면 요소 som ewhere (하지만 이름은 아님), 다른 곳에서 참조하려면 유형이어야합니다.

0

ref 속성이 최상위 요소 선언에 허용되지 않아 스키마가 유효하지 않습니다.

적어도 스키마 스키마에서 볼 수 있습니다. 스키마는 W3C XML 스키마 권장의 규범적인 부분입니다. http://www.w3.org/TR/xmlschema-1/#normative-schemaSchema

속성은 유형이 같지만 이름이 다른 두 개의 요소를 전역 적으로 정의하려는 경우 요소, 유형, 속성, 그룹 등을 글로벌하게 정의하는 데 사용됩니다. 전역 (명명 된) 유형을 선언 한 다음 요소 선언에서 해당 유형을 참조하십시오. 이는 @Damien_The_Unbeliever가 답변 한 것처럼 type 속성을 사용하여 수행됩니다.