Как проверить строку XML в файле схемы XML - PullRequest
2 голосов
/ 21 апреля 2009

Я занимаюсь разработкой веб-приложения VB в .NET3.5 с использованием Visual Studio 2008.

У меня возникают трудности с проверкой какого-либо XML в виде строки, прежде чем я добавлю его в форму HTML для публикации третьему лицу. У меня есть файл схемы XML от стороннего производителя для проверки, и на данный момент я хочу, чтобы приложение выполняло проверку перед каждым сообщением.

После поиска я нашел ссылки на XmlValidatingReader, но это устарело, и у меня возникают трудности с поиском другого способа сделать это.

Также все хорошие примеры есть в C # - сейчас я застрял с VB. Это то, что у меня есть, и я ищу помощи!

Public Function ValidateXML(ByVal strXML As String) As Boolean

    ' er how do I get the schema file into here?
    Dim schema As XmlReader

    Dim settings As XmlReaderSettings = New XmlReaderSettings()
    settings.Schemas.Add("", schema)
    settings.ValidationType = ValidationType.Schema

    ' When I use LoadXML to get the string I can't use the settings object above to get the schema in??
    Dim document As XmlDocument = New XmlDocument()
    document.LoadXml(strXML)

    document.Validate(AddressOf ValidationEventHandler)

End Function

Private Sub ValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
    ' Gonna return false here but haven't got to it yet! Prob set a variable for use above
End Sub

Спасибо

Ответы [ 2 ]

3 голосов
/ 21 апреля 2009

Вот пример: XmlSchemaValidator в VB.NET

ОБНОВЛЕНИЕ - Попробуйте это:

Public Function ValidateXML(ByVal strXML As String) As Boolean
  Dim xsdPath As String = "path to your xsd"
  Dim schema As XmlReader = XmlReader.Create(xsdPath)
  Dim document As XmlDocument = New XmlDocument()
  document.LoadXml(strXML)
  document.Schemas.Add("", schema)
  document.Validate(AddressOf ValidationEventHandler)
End Function
1 голос
/ 21 апреля 2009

Это то, что я закончил с

Public validationErrors As String = ""

Public Function ValidPortalRequest(ByVal XMLPortalRequest As String) As Boolean
    Try
        Dim objSchemasColl As New System.Xml.Schema.XmlSchemaSet
        objSchemasColl.Add("xxx", "xxx")
        objSchemasColl.Add("xxx", "xxxd")
        Dim xmlDocument As New XmlDocument
        xmlDocument.LoadXml(XMLPortalRequest)
        xmlDocument.Schemas.Add(objSchemasColl)
        xmlDocument.Validate(AddressOf ValidationEventHandler)
        If validationErrors = "" Then
            Return True
        Else
            Return False
        End If
    Catch ex As Exception
        Throw
    End Try
End Function

Private Sub ValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
    validationErrors += e.Message & "<br />"
End Sub

То же, что и у Хосе, за исключением того, что я добавил 2 XSD в качестве набора схем вместо того, чтобы читать их с помощью XMLReader.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...