为什么未使用DTD路径?

时间:2019-01-14 21:52:57

标签: vb.net path dtd

使用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

0 个答案:

没有答案