#xml #vb.net #validation #xsd
#xml #vb.net #проверка #xsd
Вопрос:
Я хочу проверить xml на соответствие XSD (VB.NET ). Моя функция выглядит так:
Private Function ValidateXML(ByVal xml As MemoryStream, ByVal xsd As String) As ArrayList
End Function
Как я могу выполнить проверку, если мой xml представляет собой memorystream / stream (я использую stream, потому что мне не нужно хранить xml), а мой xsd представляет собой строку (я получаю свой xsd из веб-сервиса в виде строки, и мне не нужно сохранять его в файле)?
Большое спасибо за помощь!
Ответ №1:
Возможно, что-то вроде этого.
Imports System.Xml
Imports System.IO
Imports System.Xml.Schema
Module Module1
Private isvalid As Boolean
Sub Main()
Dim xml As MemoryStream
Dim xsd As String
Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.Schema
settings.Schemas.Add("Schema:name", xsd)
AddHandler settings.ValidationEventHandler, AddressOf MyValidationEventHandler
Dim v = XmlReader.Create(xml, settings)
While (v.Read())
End While
If isValid Then
Console.WriteLine("Document is valid")
Else
Console.WriteLine("Document is invalid")
End If
End Sub
Public Sub MyValidationEventHandler(ByVal sender As Object, ByVal args As ValidationEventArgs)
isValid = False
Console.WriteLine("Validation eventn" args.Message)
End Sub
End Module
Комментарии:
1. Спасибо! Но в строке: настройки. Schemas.Add(«Schema:name», xsd) Я должен поместить URI в схему, я хочу использовать строку с xsd. Как я могу это сделать?
2. В имеющейся у вас строке xsd у вас должно быть пространство имен xmlns=»urn:bookstore-schema», вы должны очень легко это получить. Имя схемы xsd и имя схемы xml должны совпадать в любом случае, иначе xml никогда не будет проверяться, я думаю.
3. В моем xsd у меня есть xmlns: ttset=» ttset.com/or » xmlns:xs=» w3.org/2001/XMLSchema «. Что я должен использовать?
4. первый, подробнее об этом здесь msdn.microsoft.com/en-us/library /…