2

スキーマに対して xml を検証しようとしています。私は XmlReaderSetting を使用しており、MSDN の例に従おうとしていますが、機能させることができません。スキーマに対してまったく異なるファイルをスローしても、xml は検証されません。私が欠けているものを誰かが説明してくれますか?

ありがとう、

    Protected Sub ValidateXML(xmlFilePath As String, schemasFilePath As String)

    Try

        Dim settings As XmlReaderSettings = New XmlReaderSettings()

        settings.Schemas.Add("http://www.w3.org/2001/XMLSchema", schemasFilePath)
        settings.ValidationType = ValidationType.Schema

        Dim reader As XmlReader = XmlReader.Create(xmlFilePath, settings)
        Dim document As XmlDocument = New XmlDocument()
        document.Load(reader)

        Dim eventHandler As ValidationEventHandler = New ValidationEventHandler(AddressOf ValidationEventHandler)

        ' the following call to Validate succeeds.
        document.Validate(eventHandler)
        reader.Close()

    Catch ex As Exception
        Messagebox(ex.Message, "error")
    End Try

End Sub

Protected Sub ValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)

    Select Case e.Severity
        Case XmlSeverityType.Error
            'Messagebox(e, "error")
        Case XmlSeverityType.Warning
            'Messagebox(e, "error")
    End Select

End Sub
4

2 に答える 2

3

XML ファイルを読み取る 2 つの異なる方法を混在させています。XmlReaderオブジェクトとオブジェクトを使用していXmlDocumentます。通常、どちらか一方のみを使用します。あなたが行ったように、両方を使用しても機能しますが、不必要な混乱が生じます.

検証が機能しない理由は、スキーマ検証をリーダーに追加しているが、ValidationEventHandlerメソッドをXmlDocumentオブジェクトにアタッチしているためです。XmlDocumentとはどちらもXmlReaderスキーマ検証を実行でき、検証を実行するために使用する独自のXmlSchemaSetおよび 検証イベント ハンドラーをそれぞれ持っています。あなたは彼らが必要とするものすべてをどちらか一方に与えるのではなく、それぞれに必要なものの半分を与えました。つまり、次のことを行いました。

  • XmlReader のスキーマ: SET
  • XmlReader のイベント ハンドラ: NOT SET
  • XmlDocument のスキーマ: NOT SET
  • XmlDocument のイベント ハンドラ: SET

そのため、どちらのオブジェクトも、適切に検証するために必要なすべての情報を持っていません。XmlReaderオブジェクトは検証を実行しますが、検出したエラーについては通知されませんが、オブジェクトは検証をまったく実行しませんが、エラーが発生した場合にXmlDocument通知する機能があります。検証エラーが見つかりました。これを修正するには、オブジェクトの検証イベント ハンドラを設定するか、オブジェクトのスキーマXmlReaderを設定する必要があります。XmlDocument例えば:

Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.w3.org/2001/XMLSchema", schemasFilePath)
settings.ValidationType = ValidationType.Schema
AddHandler settings.ValidationEventHandler, New ValidationEventHandler(AddressOf ValidationEventHandler)
Dim reader As XmlReader = XmlReader.Create(xmlFilePath, settings)
' Read the document...
于 2013-02-26T14:05:50.950 に答える