2016-01-07 49 views
6

.NETでXMLを介してデータをやり取りするWebサービスを構築しています。私が定義したXSDを使用して着信要求のXMLを検証したいと思います。ここでXML検証エラー:要素が宣言されていません

はXSDである:ここでは

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="POSearch"> 
     <xs:sequence minOccurs="0" maxOccurs="10"> 
      <xs:element name="POID" type="xs:positiveInteger"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

はXMLである:ここでは

<POSearch> 
    <POID>1</POID> 
    <POID>2</POID> 
</POSearch> 

は、検証コードは、C#である:

static void Main(string[] args){ 
    XmlSchemaSet iSchemas = new XmlSchemaSet(); 
    iSchemas.Add(string.Empty, @"...xsd file location"); 

    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.ValidationType = ValidationType.Schema; 
    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; 
    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; 
    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; 
    settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); 
    settings.Schemas.Add(iSchemas); 

    XmlReader reader = XmlReader.Create(@"...xml file location", settings); 

    try { 
     while(reader.Read()) 
     ; 
    } 
    catch(Exception ex) { 
     Console.WriteLine(ex.Message); 
    } 
} 

private static void ValidationCallBack(object sender, ValidationEventArgs args) { 
    if(args.Severity == XmlSeverityType.Warning) 
     Console.WriteLine("\tWarning: Matching schema not found. No validation occurred." + args.Message); 
    else 
     Console.WriteLine("\tValidation error: " + args.Message); 
    } 

私はこの作業を持っていたように私は感じます前に、なぜこれが今働いていないのか完全にわからない。私がこれを実行するたびに、次の例外メッセージが表示されます。

Validation error: The 'POSearch' element is not declared.

XSDの定義が間違っていますか?検証コードが間違っていますか?要素はすべて明確に存在します。正しい方向で私を指す助けがあれば、大変感謝しています。

答えて

6

型は宣言されていますが、その型の宣言された要素はありません。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="POSearch" type="POSearch"/> 

    <xs:complexType name="POSearch"> 
     <xs:sequence minOccurs="0" maxOccurs="10"> 
      <xs:element name="POID" type="xs:positiveInteger"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
+0

おかげ

は、要素宣言を追加します。私はこれ以上私の髪を引っ張ってきました。私はXSDの新機能です – mac

4

はこれを試してみてください:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="POSearch"> 
     <xs:sequence minOccurs="0" maxOccurs="10"> 
      <xs:element name="POID" type="xs:positiveInteger"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="POSearch" type="POSearch"/> 
</xs:schema> 
関連する問題