1

XML スキーマに対して XML ドキュメントを検証します。最近、XML ファイルと XSD スキーマに新しい属性を追加しました。しかし、検証を行うと、常に例外が発生します

base{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;
}

それで、誰かが私が間違っていることを知っていますか?助けてくれてありがとう

よろしくアドレアーノ

4

1 に答える 1

0

キャッチは、XSD のターゲット名前空間にあります。XML 属性はグローバルに宣言されているため、スキーマの targetNamespace に一致するエイリアスをプレフィックスとして付ける必要があると思います (xs:schema 属性セットは表示されていません)。

于 2013-03-15T12:28:12.770 に答える