MSXML VBA-使用多个导入的名称空间根据XSD验证XML文档

MSXML VBA-使用多个导入的名称空间根据XSD验证XML文档,xml,vba,validation,xsd,msxml,Xml,Vba,Validation,Xsd,Msxml,到目前为止,为了验证XML文件,我使用了Notepad++。下面的XML似乎验证得很好(同样在LiquidStudios和我检查过的任何其他XML验证工具中): 让我觉得疯狂的是,“walidujXML”子文件按预期工作,当我生成XML文件时,将其保存在本地,然后从本地路径将其加载到子文件中。但是,当我在XML生成子部分的最后一步使用它并将XML作为参数传递到XML验证子部分时,它会抛出如下错误: 元素上的属性“schemaLocation” '{http://crd.gov.pl/wzor/2

到目前为止,为了验证XML文件,我使用了Notepad++。下面的XML似乎验证得很好(同样在LiquidStudios和我检查过的任何其他XML验证工具中):

让我觉得疯狂的是,“walidujXML”子文件按预期工作,当我生成XML文件时,将其保存在本地,然后从本地路径将其加载到子文件中。但是,当我在XML生成子部分的最后一步使用它并将XML作为参数传递到XML验证子部分时,它会抛出如下错误:

元素上的属性“schemaLocation” '{http://crd.gov.pl/wzor/2020/03/16/9199/}“Deklaracja”未定义 在DTD/Schema中。 属性的{http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2013/05/23/eD/KodyCECHKRAJOW/}柯德 元素上的“Waluty” '{http://crd.gov.pl/wzor/2020/03/16/9199/}“瓦托斯卡”未在中定义 DTD/模式

我非常感谢您对我(在许多其他验证错误中)收到以下消息的原因的任何反馈:

   <?xml version="1.0" encoding="UTF-8"?>
<tns:Deklaracja xmlns:tns="http://crd.gov.pl/wzor/2020/03/16/9199/">
    <tns:Naglowek>
        <tns:KodFormularza kodSystemowy="TPR-C (2)" kodPodatku="CIT" rodzajZobowiazania="Z" wersjaSchemy="1-0E">TPR-C</tns:KodFormularza>
        <tns:WariantFormularza>2</tns:WariantFormularza>
        <tns:CelZlozenia>1</tns:CelZlozenia>
        <tns:OkresOd>2020-01-01</tns:OkresOd>
        <tns:OkresDo>2020-12-31</tns:OkresDo>
        <tns:KodUrzedu>0000</tns:KodUrzedu>
    </tns:Naglowek>
    <tns:Podmiot1 rola="Podmiot składający">
        <tns:NIP>11111111112</tns:NIP>
        <tns:PelnaNazwa>test 1</tns:PelnaNazwa>
        <tns:KodPKD>2313Z</tns:KodPKD>
        <tns:KodKraju>PL</tns:KodKraju>
    </tns:Podmiot1>
    <tns:Podmiot2 rola="Podmiot, dla którego jest składana informacja">
        <tns:NIP>11111111112</tns:NIP>
        <tns:PelnaNazwa>TEST 2</tns:PelnaNazwa>
        <tns:KodPKD>2313Z</tns:KodPKD>
    </tns:Podmiot2>
    <tns:PozycjeSzczegolowe>
        <tns:PodmiotNZ>ZK01</tns:PodmiotNZ>
        <tns:InnyPodmiot>
            <tns:MarzaOper>5.17</tns:MarzaOper>
            <tns:MarzaZysku>4.88</tns:MarzaZysku>
            <tns:RentAkt>7.18</tns:RentAkt>
            <tns:RentKW>46.59</tns:RentKW>
        </tns:InnyPodmiot>
        <tns:Transakcja>
            <!--1/A-->
            <tns:KategoriaA>1009</tns:KategoriaA>
            <tns:WartoscA kodWaluty="PLN">10</tns:WartoscA>
            <tns:TNieZwolniona>ZW02</tns:TNieZwolniona>
            <tns:Kraj>PL</tns:Kraj>
            <tns:Metoda01>MW01</tns:Metoda01>
            <tns:CenaMin kodWaluty="PLN">1</tns:CenaMin>
            <tns:CenaMax kodWaluty="PLN">2</tns:CenaMax>
            <tns:Miara>tona</tns:Miara>
            <tns:Weryfikacja>SW01</tns:Weryfikacja>
            <tns:CenaPorMin kodWaluty="PLN">1</tns:CenaPorMin>
            <tns:CenaPorMax kodWaluty="PLN">2</tns:CenaPorMax>
        </tns:Transakcja>
    </tns:PozycjeSzczegolowe>
</tns:Deklaracja>
Public Sub walidujXML(docxml As MSXML2.DOMDocument60)
    Dim SCHEMA_NAMESPACE_MAIN As String
    Dim SCHEMA_LOCATION_MAIN As String
    SCHEMA_NAMESPACE_MAIN = "http://crd.gov.pl/wzor/2020/03/16/9199/"
    SCHEMA_LOCATION_MAIN = "http://crd.gov.pl/wzor/2020/03/16/9199/schemat.xsd"
    Dim objSchemaCache As New XMLSchemaCache60
    Dim objErr As MSXML2.IXMLDOMParseError2
    objSchemaCache.Add SCHEMA_NAMESPACE_MAIN, SCHEMA_LOCATION_MAIN
    With docxml
        .async = False
        .validateOnParse = False
        .resolveExternals = False
        Set .Schemas = objSchemaCache
        .SetProperty "MultipleErrorMessages", True
        Set objErr = .Validate()
    End With
    Dim oErr As Object
    If objErr.allErrors.Length = 0 Then MsgBox "nie ma błędów!"
    Dim stringBledy As String
    If objErr.allErrors.Length > 0 Then
        For Each oErr In objErr.allErrors
            stringBledy = stringBledy & oErr.reason & vbNewLine
        Next oErr
        MsgBox "W uzupełnionych polach znaleziono błędy:" & vbNewLine & vbNewLine & stringBledy
    End If
End Sub