我正在使用以下代码来验证XML文件:
'DTD validation
Dim doc As XmlDocument = New XmlDocument()
Dim dtdDoc As String = ftpPath & "\" & dtdDocument
AppendText(vbCrLf)
Try
doc.Load(fileName)
Catch ex As Exception
AppendText(ex.Message)
ShowFailMessage()
End Try
Dim isXmlValid As Boolean = True
Dim xmlValMsg As New StringBuilder()
Dim sw As New StringWriter()
doc.Save(sw)
doc.Save(fileName)
Dim stream As Stream = New FileStream(fileName, FileMode.Open)
Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.DTD
settings.DtdProcessing = DtdProcessing.Parse
AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
Dim r As XmlReader = XmlReader.Create(stream, settings, "R:\ftproot\graphics\" & dtdDocument)
While r.Read()
End While
r.Close()
stream.Close()
stream.Dispose()
Private Shared Sub ValidationCallBack(sender As Object, e As ValidationEventArgs)
AppendText("DTD Validation Error: " & e.Message)
isDTDValidated = False
End Sub
我从此验证码中收到以下错误:
“元素'MarketDate'具有无效的子元素'Date'。期望的可能元素列表:'DateFormat'。”
以下是相关的XML:
<MarketDate>
<MarketDateRole>01</MarketDateRole>
<Date>20150202</Date>
</MarketDate>
以下是DTD中的内容:
<!ELEMENT MarketDate (MarketDateRole,DateFormat,Date)>
所以'Date'是一个有效的子元素。我猜测并不是日期无效,而是缺少DateFormat。我对这个假设是否正确?