हां, आप सही रास्ते पर हैं। किसी XML दस्तावेज़ को मान्य करना XmlDocument
या XmlReader
(जैसा कि मैं बाद में वर्णन करूंगा, आप XDocument
का भी उपयोग कर सकते हैं) का उपयोग करके किया जा सकता है। आप जो भी चुनते हैं वह आपकी स्थिति पर निर्भर करेगा, लेकिन वे दोनों समान रूप से काम करते हैं। जब उन्हें दस्तावेज़ में कोई त्रुटि मिलती है, तो वे ValidationEventHandler
प्रतिनिधि को कॉल करते हैं। XmlReader
इसे XmlReaderSettings
ऑब्जेक्ट में किसी ईवेंट के माध्यम से कॉल करता है जबकि XmlDocument
इसे Validate
विधि में पैरामीटर के रूप में पारित प्रतिनिधि के माध्यम से कॉल करता है। यहाँ एक सरल वर्ग जो त्रुटियों इकट्ठा करने के लिए इस्तेमाल किया जा सकता है:
Public Class XmlValidationErrorBuilder
Private _errors As New List(Of ValidationEventArgs)()
Public Sub ValidationEventHandler(ByVal sender As Object, ByVal args As ValidationEventArgs)
If args.Severity = XmlSeverityType.Error Then
_errors.Add(args)
End If
End Sub
Public Function GetErrors() As String
If _errors.Count <> 0 Then
Dim builder As New StringBuilder()
builder.Append("The following ")
builder.Append(_errors.Count.ToString())
builder.AppendLine(" error(s) were found while validating the XML document against the XSD:")
For Each i As ValidationEventArgs In _errors
builder.Append("* ")
builder.AppendLine(i.Message)
Next
Return builder.ToString()
Else
Return Nothing
End If
End Sub
End Class
कि कक्षा में ValidationEventHandler
विधि ValidationEventHandler
प्रतिनिधि के हस्ताक्षर से मेल खाता है, तो आप या तो XmlReader
या से त्रुटियों को इकट्ठा करने के लिए इसका इस्तेमाल कर सकते हैं XmlDocument
। यहाँ कैसे आप XmlDocument
के साथ उपयोग कर सकते हैं:
Public Function LoadValidatedXmlDocument(xmlFilePath As String, xsdFilePath As String) As XmlDocument
Dim doc As New XmlDocument()
doc.Load(xmlFilePath)
doc.Schemas.Add(Nothing, xsdFilePath)
Dim errorBuilder As New XmlValidationErrorBuilder()
doc.Validate(New ValidationEventHandler(AddressOf errorBuilder.ValidationEventHandler))
Dim errorsText As String = errorBuilder.GetErrors()
If errorsText IsNot Nothing Then
Throw New Exception(errorsText)
End If
Return doc
End Function
और यहाँ कैसे आप XmlReader
के साथ उपयोग कर सकते हैं:
Public Sub LoadXml(xmlFilePath As String, xsdFilePath As String)
Dim settings As New XmlReaderSettings()
settings.Schemas.Add(Nothing, xsdFilePath)
settings.ValidationType = ValidationType.Schema
Dim errorBuilder As New XmlValidationErrorBuilder()
AddHandler settings.ValidationEventHandler, New ValidationEventHandler(AddressOf errorBuilder.ValidationEventHandler)
Dim reader As XmlReader = XmlReader.Create(xmlFilePath, settings)
' Read the document...
Dim errorsText As String = errorBuilder.GetErrors()
If errorsText IsNot Nothing Then
' Handle the errors
End If
End Function
या फिर, आप नए XDocument
वर्ग का उपयोग कर सकते हैं। XDocument
के साथ ऐसा करने का तरीका XmlDocument
के समान है। XDocument
के लिए Validate
एक्सटेंशन विधि है जो अभी तक ValidationEventHandler
प्रतिनिधि लेती है। यहाँ इस बात का एक उदाहरण है:
Public Function LoadValidatedXDocument(xmlFilePath As String, xsdFilePath As String) As XDocument
Dim doc As XDocument = XDocument.Load(xmlFilePath)
Dim schemas As New XmlSchemaSet()
schemas.Add(Nothing, xsdFilePath)
Dim errorBuilder As New XmlValidationErrorBuilder()
doc.Validate(schemas, New ValidationEventHandler(AddressOf errorBuilder.ValidationEventHandler))
Dim errorsText As String = errorBuilder.GetErrors()
If errorsText IsNot Nothing Then
Throw New Exception(errorsText)
End If
Return doc
End Function
एक डेटाबेस में XML दस्तावेज़ से डेटा लोड करने के लिए के रूप में, यह, कैसे कहने के लिए ठीक है, असंभव है करने के लिए है कि XML दस्तावेज़ की स्कीमा, स्कीमा जानने के बिना डेटाबेस, डेटाबेस की तरह, आदि। मैं कुछ शोध करने के लिए एक्सएमएल डेटा पढ़ने और डेटाबेस में डेटा लिखने और आप कितनी दूर मिलते हैं, देखने के लिए कुछ शोध करने की सलाह देंगे। यदि आपके पास परेशानी में भाग लेने पर कोई विशिष्ट प्रश्न हैं, तो हम सहायता के लिए यहां आएंगे :)
संभावित डुप्लिकेट [VB.net में स्कीमा के विरुद्ध XML को कैसे सत्यापित करें] (http://stackoverflow.com/questions/ 15088585/कैसे-से-वैध-xml-against-schema-in-vb-net) –