2013-03-15 97 views
1

我使用XML模式验证XML文档。我最近在XML文件和XSD架构中添加了一个新属性。但这样做验证的时候,我总是得到一个异常XML模式验证结果“属性未声明”

基地{System.EventArgs} {} System.XML.Shema.ValidationEventArgs
例外:“在Anhaenger属性未声明
消息: “Anhaenger属性没有被声明。

在这里,在我的XSD架构声明:

<xs:attribute id="Anhaenger" name="Anhaenger" use="optional"> 
    <xs:simpleType> 
     <xs:restriction base="D2TAnhaenger_Type" /> 
    </xs:simpleType> 
</xs:attribute> 
<xs:simpleType id="D2TAnhaenger_Type" name="D2TAnhaenger_Type"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="70" /> 
     <xs:whiteSpace value="collapse" /> 
    </xs:restriction> 
</xs:simpleType> 

,这是XML文件中的属性:

Anhaenger="ANH - 0815" 

这里我用在做校正代码我应用:

protected XmlDocument ValidateAndCorrect(Stream XMLStream) 
{ 
    // Verwenden von XMLReader, damit die Schemainformationen an den Knoten angefügt werden. 
    // Dann können wir später korrigieren. 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.Schemas.Add("", m_SchemaFile); 
    settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler); 
    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema; 
    settings.ValidationType = ValidationType.Schema; 

    // Dokument aus dem Stream holen. 
    XmlDocument document = new XmlDocument(); 
    XMLStream.Seek(0, SeekOrigin.Begin); 
    XmlReader reader = XmlReader.Create(XMLStream, settings); 
    document.Load(reader); 

    int i = 0; 

    bool validate = true; 
    while (validate) 
    { 
     i++; 
     Debug.WriteLine("--- Validierung und Korrektur beginnt ---"); 
     Debug.WriteLine("Durchlauf Nummer: " + i.ToString()); 

     m_errors = new List<ValidationEventArgs>(); 
     document.Validate(this.ValidationEventHandler); 
     validate = CorrectValidationResult(document.ChildNodes); 
    } 

    return document; 
} 

那么,有没有人有一个想法我做错了什么?非常感谢您的帮助

问候 Adleano

回答

0

美中不足的是在你的XSD的目标命名空间;我猜(你没有显示xs:schema属性集),因为你的XML属性被声明为全局的,所以它必须以与你的模式的targetNamespace匹配的别名作为前缀。

相关问题