Кажется, что 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 сразу, я думаю, что есть способ.
Так, как получить все ошибки проверки сразу?