Zum Inhalt springen

vb.net Problem mit XML-Validator Klasse


noobvb.net

Empfohlene Beiträge

Hi Leute,

hab mal wieder ein Problem.

Ich habe folgende Klasse, mit der ich eine XML-Datei gegen ein XML Schema prüfen möchte, aber ich bekomme ständig die Fehlermeldung, dass ich Ungültige Daten auf Stammebene. Zeile1, Position 1 habe. Kann mir aber nicht vorstellen, woran der Fehler liegt. Hatte vielleicht jemand von euch schon das selbe Problem und kennt die Lösung?

Die Klasse

Public Class XmlValidator


    Private ErrorList As List(Of String)

    Private SchemaList As List(Of String)

    Private SchemaReaderSettings As XmlReaderSettings

    Private SchemaValidation As ValidationEventHandler



    'Instanzieren der XmlValidator Klasse

    Public Sub New()

        SchemaList = New List(Of String)

        SchemaReaderSettings = New XmlReaderSettings()

        SchemaValidation = New ValidationEventHandler(AddressOf ValidationHandler)

    End Sub



    ' Bereitstellen der Einstellungen während der  Validierung

    Public ReadOnly Property SchemaSettings() As XmlReaderSettings

        Get

            Return SchemaReaderSettings

        End Get

    End Property



    ' Liste mit absoluten Pfadangaben zu den Schemas, gegen die geprüft werden soll

    Public ReadOnly Property Schemas() As List(Of String)

        Get

            Return SchemaList

        End Get

    End Property


    'Validiert die gegebenen XML-Strings gegen das Schema


    ''' <param name="RawXml">Die rohen XMl Daten, die validiert werden sollen</param>

    ''' <returns>Allgemeine Liste von Fehlermeldungen</returns>

    Public Function ValidateXml(ByVal RawXml As String) As List(Of String)

        ErrorList = New List(Of String)


        If Me.Schemas.Count > 0 Then

            Dim ReaderSettings As New XmlReaderSettings()


            With ReaderSettings

                .ValidationType = ValidationType.Schema

                .ValidationFlags = XmlSchemaValidationFlags.ProcessSchemaLocation Or XmlSchemaValidationFlags.ReportValidationWarnings Or XmlSchemaValidationFlags.AllowXmlAttributes


                For Each SchemaPath As String In Me.Schemas

                    .Schemas.Add(Nothing, XmlReader.Create(SchemaPath, Me.SchemaSettings))

                Next


                AddHandler .ValidationEventHandler, SchemaValidation

            End With


            Using Reader As XmlReader = XmlReader.Create(New StringReader(RawXml), ReaderSettings)

                While Reader.Read()

                    'Lies das gesamte File und ruft die Validierungs Handler Subrutine auf, 

                    'wenn ein Fehler gefunden wird. Auf diese Weise ist es möglich alle 

                    'Fehler des XML-Files zu ermitteln, anstatt bei jedem Fehler zu stoppen.


                End While

            End Using

        End If


        Return ErrorList

    End Function


    Private Sub ValidationHandler(ByVal sender As Object, ByVal e As System.Xml.Schema.ValidationEventArgs)

        If e.Severity = XmlSeverityType.Error Then

            ErrorList.Add(e.Message)

        End If

    End Sub

End Class
Der Dazugehörige Aufruf
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim openclass As New XmlValidator

        Dim Pfad As String

        Dim SchemaLocation As String


        Pfad = "PfadzurXMLDatei"

        SchemaLocation = "PfadzurSchemadatei"

        openclass.Schemas.Add(SchemaLocation)

        openclass.ValidateXml(Pfad)

        MsgBox(openclass.Schemas)



    End Sub

End Class

Und die dazugehörigen Schema und XMl Files

Schema:

<?xml version="1.0" encoding="utf-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name ="security"></xs:element>

<xs:element name="password">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:minLength value ="8"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

</xs:schema>

XML-File:

<?xml version="1.0" encoding="utf-8" ?>

- <security xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="testschema.xsd">

<password>abcdefgh</password>

</security>

Vielen Dank schon mal im Voraus

Gruß

noob

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Leute,

habe mittlererweile den Fehler gefunden. Ich habe die falsche Klasse für mein Problem verwendet. Musste einfach

 Using Reader As XmlReader = XmlReader.Create(New StringReader(RawXml), ReaderSettings)
durch
Using Reader As XmlReader = XmlReader.Create(New StreamReader(RawXml), ReaderSettings)

ersetzen. Der Grund dafür ist auch recht simpel. Die StringReader-Klasse erwartet ein XML-File in Form eines Strings. Die StreamReader-Klasse hingegen erwartet einen Pfad.

Beste Grüße

noobvb.net

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...