2013-03-15 84 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匹配的別名作爲前綴。