2012-03-31 24 views
1

問題: C#を使用してXMLインスタンスファイルに対してXMLスキーマファイルを検証しようとしています。しかし、私はこれらのメッセージを得続ける:C#を使用したXMLスキーマ検証

Could not find schema information for the element 'Courses'. 
Could not find schema information for the element 'Course'. 
Could not find schema information for the element 'Code'. 
Could not find schema information for the attribute 'Undergrad'. 
Could not find schema information for the element 'CourseName'. 
Could not find schema information for the element 'Instructor'. 
Could not find schema information for the element 'Name'. 
Could not find schema information for the element 'First'. 
Could not find schema information for the element 'Last'. 
Could not find schema information for the element 'Contact'. 
Could not find schema information for the attribute 'Office'. 
Could not find schema information for the element 'Phone'. 
Could not find schema information for the element 'Room'. 
Could not find schema information for the element 'Cap'. 

私のスキーマファイル(tempuri.comは私の実際のファイル内の実際の場所で置き換えられる)

<?xml version="1.0" encoding="utf-8"?> 
<xsd:schema targetNamespace="http://www.tempuri.com/Courses3.xsd" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified" 
    xmlns="http://www.tempuri.com/Courses3.xsd" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
> 
    <!--definition of simple elements--> 
    <xsd:element name="Cap" type="xsd:integer"/> 
    <xsd:element name="Room" type="xsd:string"/> 
    <xsd:element name="Phone" type="xsd:integer"/> 
    <xsd:element name="First" type ="xsd:string"/> 
    <xsd:element name="Last" type ="xsd:string"/> 
    <xsd:element name="CourseName" type ="xsd:string"/> 

    <!--definition of attributes--> 
    <xsd:attribute name="Grad" type="xsd:string"/> 
    <xsd:attribute name="Undergrad" type="xsd:string"/> 
    <xsd:attribute name="Office" type="xsd:string"/> 


    <!--definition of complext elements--> 

    <!--Courses--> 
    <xsd:element name="Courses"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element ref="Course" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 

    <!--Course--> 
    <xsd:element name="Course"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element ref="Code" minOccurs="1" maxOccurs="1"/> 
     <xsd:element ref="CourseName" minOccurs="1" maxOccurs="1"/> 
     <xsd:element ref="Instructor" minOccurs="1" maxOccurs="1"/> 
     <xsd:element ref="Room" minOccurs="0" maxOccurs="1"/> 
     <xsd:element ref="Cap" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 

    <!--Code--> 
    <xsd:element name="Code"> 
    <xsd:complexType> 
     <xsd:attribute ref="Grad" use ="optional"/> 
     <xsd:attribute ref="Undergrad" use ="optional"/> 
    </xsd:complexType> 
    </xsd:element> 

    <!--Instructor--> 
    <xsd:element name="Instructor"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element ref="Name" minOccurs="1" maxOccurs="1"/> 
     <xsd:element ref="Contact" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 

    <!--Name--> 
    <xsd:element name="Name"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element ref="First" minOccurs="1" maxOccurs="1"/> 
     <xsd:element ref="Last" minOccurs="1" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 

    <!--Contact--> 
    <xsd:element name="Contact"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element ref="Phone" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
     <xsd:attribute ref="Office" use ="optional"/> 
    </xsd:complexType> 
    </xsd:element> 

</xsd:schema> 

私のXMLインスタンス:

<?xml version="1.0" encoding="utf-8"?> 
<Courses> 
    <Course> 
    <Code Undergrad ="CSEXXX"/> 
    <CourseName> 
     Programming 
    </CourseName> 
    <Instructor> 
     <Name> 
     <First> 
      Jim 
     </First> 
     <Last> 
      Bob 
     </Last> 
     </Name> 
     <Contact Office ="MLG562"> 
     <Phone> 
      5555555555 
     </Phone> 
     </Contact> 
    </Instructor> 
    <Room> 
     TLK130 
    </Room> 
    <Cap> 
     70 
    </Cap> 
    </Course> 

My C#検証方法:

public string CoursesVerification(string pXMLurl, string pXSDurl) 
    { 
     XmlValidatingReader vr = null; 
     try 
     { 
      XmlTextReader nvr = new XmlTextReader(pXMLurl); //get xml file 
      nvr.WhitespaceHandling = WhitespaceHandling.None; 
      vr = new XmlValidatingReader(nvr); //wrap nvr in vr 
      vr.Schemas.Add(GetTargetNamespace(pXSDurl), pXSDurl); 
      vr.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); 
      while (vr.Read()); 
      return _VerifyString; 
     } 
     catch (Exception ex) 
     { 
      return ex.Message; 
     } 
     finally 
     { 
      if (vr != null) vr.Close(); 
     } 
    } 

    static string GetTargetNamespace(string src) 
    { 
     XmlTextReader nvr = null; 
     try 
     { 

      nvr = new XmlTextReader(src); 
      nvr.WhitespaceHandling = WhitespaceHandling.None; 
      while (nvr.Read()) 
      { 
       if (nvr.NodeType == XmlNodeType.Element && nvr.LocalName == "schema") 
       { 
        while (nvr.MoveToNextAttribute()) 
        { 
         if (nvr.Name == "targetNamespace") return nvr.Value; 
        } 
       } 
      } 
      return ""; 
     } 
     finally 
     { 
      if (nvr != null) nvr.Close(); 
     } 
    } 

    static void ValidationCallBack(object sender, ValidationEventArgs e) 
    { 
     if (String.Compare(_VerifyString, "No Error") == 0) _VerifyString = e.Message + "\n"; 
     else _VerifyString += e.Message + "\n"; 
    } 

私は何を見落としているのか把握しようとしています。この検証で何が間違っていますか?

答えて

2

私はすべてを調べる時間がないので、あなたのXMLファイルは名前空間を定義していないようですが、あなたのXSDはそうです。それはおそらく見始める場所です。 XMLファイルのルート要素で、名前空間を指定する必要があります。

<Courses xmlns="http://www.tempuri.com/Courses3.xsd"> 
+0

ありがとうございます。私は名前空間を追加しました。しかし、私はまだ同じメッセージを持っていました。私はできるだけ多くのコンテンツを謝罪しました。私はできるだけそれを制限しようとしました。 –

+0

@Kiwiちょうど数分でコードを実行しましたが、私の提案は(ほとんど)追加されました。あなたが提供したXSDはUndergradとOfficeの属性を定義していませんが、そうでなければあなたが言及した他のすべてのエラーはもう存在しません – psubsee2003

+0

さて、私はもう一度やりました。今回はうまくいった。私はこれらのxmlファイルをインターネットに保存しています。多分、私のキャッシュには何かが残っていたでしょうか?わからない。ありがとうございました。 - 私の属性がなぜ認識されないのかについてのヒント?私の単純な要素定義の下のXSDの属性を定義しているようです... –

関連する問題