使用Visual Studio Visual Basic,当我尝试解析doctype中的相对dtd路径时,解析器会继续使用xml文档的路径
我为resolver.ResolveUri尝试了多个版本,但始终得到相同的结果
Private Shared isValid As Boolean
Public Shared Function ValidationXSD() As String
Dim fn, fnDTD As String
Try
isValid = True
fn = "C:\0aa\sequenceA.ditamap"
fnDTD = "file:///C:\ditaot233\plugins\org.oasis-open.dita.v1_2\dtd\technicalContent\dtd\"
Dim resolver As New XmlUrlResolver()
Dim baseUri As New Uri(fnDTD)
'resolver.ResolveUri(baseUri, "-//OASIS//DTD DITA Map//EN") '-same results
resolver.ResolveUri(baseUri, "map.dtd")
Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.DTD
settings.DtdProcessing = DtdProcessing.Parse
settings.XmlResolver = resolver
Dim reader As XmlReader = XmlReader.Create(fn, settings)
Dim document As New XmlDocument()
document.Load(reader)
Dim eventHandler As New ValidationEventHandler(AddressOf MyValidationEventHandler)
document.Validate(eventHandler)
Return "isValid=" & isValid.ToString
Catch ex As Exception
isValid = False
If ex.Message.StartsWith("An error has occurred while opening external schema.") Then
Return ex.Message
Else
Return "Validation error" & vbCrLf & ex.Message
End If
End Try
End Function
Private Shared Sub MyValidationEventHandler(ByVal sender As Object, ByVal args As ValidationEventArgs)
If (args.Severity = XmlSeverityType.Warning) Then
MsgBox("Warning: Matching schema not found.", MsgBoxStyle.Critical, "Validation Handler")
Else
MsgBox("Validation error" & vbCrLf & args.Message, MsgBoxStyle.Critical, "Validation Handler")
End If
isValid = False
End Sub
'My xml file is
'<?xml version="1.0" encoding="utf-8"?>
'<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
'<map title="Eclipse content aggregated by a map">
'<topicref href="tasks/changingtheoil.xml" type="task"></topicref>
'</map>
我不断收到{“打开外部DTD'file:/// C:/0aa/map.dtd'时发生了错误:找不到文件'C:\ 0aa \ map.dtd'。”}系统.Xml.XmlException