2009-04-21 64 views
2

我使用的是在開發一個.NET3.5 VB Web應用程序的Visual Studio 2008如何驗證XML字符串針對XML架構文件

我有在證實一些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 

感謝

回答

3

下面是一個例子: XmlSchemaValidator in VB.NET

UPDATE - 試試這個:

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 
+0

嗨,何塞,這是一個有用的例子,但我曾看過它。我認爲代碼是使用XML /或模式鏈接的內置模式,因爲它沒有顯示如何添加模式,是嗎?此外,它仍然使用過時的XmlValidatingReader – 2009-04-21 10:19:16

1

這是我結束了

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 

和Jose的相同,除了我已經將2個XSD添加爲SchemaSet,而不是使用XMLReader讀取它們。