Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

vb.net Problem mit XML-Validator Klasse

Empfohlene Antworten

Veröffentlicht

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.