Как получить все ошибки проверки в DOMDocument.Validate сразу? - PullRequest
1 голос
/ 21 января 2020

Кажется, что DOMDocument.Validate останавливается на первой ошибке и не отображает остальные ошибки в файле xml.

Поэтому я использую свою схему MiniSchema.xsd:

<xs:schema  xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:lhd="http://www.statistik.gv.at/LHD-V55/Schema"
            targetNamespace="http://www.statistik.gv.at/LHD-V55/Schema"
            elementFormDefault="qualified">

    <xs:element name="kennsatz"> 
        <xs:complexType>
            <xs:sequence>
                <xs:element name="finanzjahr" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

и мой xml файл ErrorTwice. xml:

<?xml version="1.0" encoding="UTF-8"?>
<lhd:kennsatz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:lhd="http://www.statistik.gv.at/LHD-V55/Schema"
                xsi:schemaLocation="http://www.statistik.gv.at/LHD-V55/Schema file:///C:/Temp/MiniSchema.xsd">
                <lhd:finanzjahr>gogo</lhd:finanzjahr>
                <schnuppl>Error1</schnuppl>
                <schalbaschlabadu>Error2</schalbaschlabadu>
</lhd:kennsatz>  

Как видите, ErrorTwice. xml содержит две ошибки. Элемент "schnuppl" и элемент "schalbaschlabadu" недопустимы.

Когда я использую следующий код:

Dim objSchemaCache
Set objSchemaCache = CreateObject("MSXML2.XMLSchemaCache.6.0")

objSchemaCache.Add "http://www.statistik.gv.at/LHD-V55/Schema", "C:\Temp\MiniSchema.xsd"

Dim docum
Set docum = CreateObject("MSXML2.DOMDocument.6.0")
Call docum.Load("C:\Temp\ErrorTwice.xml")
Set docum.Schemas = objSchemaCache
Dim dParseError

Set dParseError = docum.validate()
Stop
If dParseError.ErrorCode <> 0 Then
    Call MsgBox("Fehler " & dParseError.ErrorCode & ": '" & dParseError.Reason & "' bei XML-Validierung. ")
Else
    Call MsgBox("No Error")
End If

Возвращается только одна ошибка: "schnuppl is not valid" , Но затем проверка останавливается, и пока я не исправлю эту ошибку, я никогда не узнаю о другой ошибке в файле («schalbaschlabadu» недопустима).

В реальном мире это проблема, потому что создание Реальное xml (bigreal. xml) занимает довольно много времени. Итак, мои клиенты: создайте xml - проверьте его - получите ошибку - создайте xml - проверьте его - получите еще одну ошибку - создайте xml еще раз - проверьте его - получите еще одну ошибку - ...

Как "XML Tools" -AddOn блокнота ++ способен найти обе ошибки в ErrorTwice. xml сразу, я думаю, что есть способ.

Так, как получить все ошибки проверки сразу?

...