2013-08-27 2 views
5

के माध्यम से पार्सिंग को सत्यापित करने के लिए वीबीएनईटी मुझे क्या करना है? मुझे XSD फ़ाइल के विरुद्ध एक XML फ़ाइल (फ़ाइल पथ/स्थान पास) को सत्यापित करने की आवश्यकता है (फ़ाइल पथ/स्थान पास करें)। मुझे यह जांचने की ज़रूरत है कि यह कोई अवैध पात्र नहीं है और इसमें एक्सएसडी में परिभाषित सभी टैग हैं यानी कोई टैग गायब नहीं है। यह xsd में परिभाषित डेटाटाइप से मेल खाता है। ऐसा करने के बाद मुझे डेटा प्राप्त करने और डेटाबेस में संग्रहीत करने के लिए xml फ़ाइल को पार्स करने की आवश्यकता है।एक्सबीडी फ़ाइल के खिलाफ एक्सएमएल फ़ाइल को वैध करने और एक्सएमएल

प्रश्न? 1) XmlDeaderSetttings का उपयोग XmlDocument और XmlReader के साथ Validate विधि के साथ करेगा जो मुझे आवश्यक चीज़ों को स्वीकार करने में मदद करेगा? क्या कोई मुझे सैंपल कोड के साथ मदद करता है?

2) विशिष्ट टैग प्राप्त करने के लिए xml फ़ाइल को पार्स करने का सबसे अच्छा तरीका क्या है?

मैं वीबीनेट के लिए नया हूं इसलिए किसी भी नमूना कोड सहायता की सराहना की जाएगी। धन्यवाद!

+0

संभावित डुप्लिकेट [VB.net में स्कीमा के विरुद्ध XML को कैसे सत्यापित करें] (http://stackoverflow.com/questions/ 15088585/कैसे-से-वैध-xml-against-schema-in-vb-net) –

उत्तर

6

हां, आप सही रास्ते पर हैं। किसी 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 दस्तावेज़ की स्कीमा, स्कीमा जानने के बिना डेटाबेस, डेटाबेस की तरह, आदि। मैं कुछ शोध करने के लिए एक्सएमएल डेटा पढ़ने और डेटाबेस में डेटा लिखने और आप कितनी दूर मिलते हैं, देखने के लिए कुछ शोध करने की सलाह देंगे। यदि आपके पास परेशानी में भाग लेने पर कोई विशिष्ट प्रश्न हैं, तो हम सहायता के लिए यहां आएंगे :)

+0

आपको बहुत धन्यवाद स्टीवन डॉगगार्ट! – user565992

+0

स्टीवन डॉगगार्ट- मैंने उपरोक्त के रूप में आपके कोड का उपयोग किया और दुर्भाग्यवश मैं किसी मुद्दे पर आया हूं कृपया http://stackoverflow.com/questions/33393364/vb-net-xsd-valalidation-repeating-valalid-error-after-dealing- साथ-एक-अमान्य – Lynchie

संबंधित मुद्दे