Xml 未找到DTD/架构声明
这是我从这里得到的示例XML: 但这并没有改变任何事情 简化示例: 我将xml的内容更改为:Xml 未找到DTD/架构声明,xml,vba,xsd,xsd-validation,xml-validation,Xml,Vba,Xsd,Xsd Validation,Xml Validation,这是我从这里得到的示例XML: 但这并没有改变任何事情 简化示例: 我将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" x
<?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:/RadLokal/trunk/Test/Access/MiniSchema.xsd">
<lhd:finanzjahr>gogo</lhd:finanzjahr>
</lhd:kennsatz>
果戈
文件C:\RadLokal\trunk\Test\Access\minichema.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>
错误与以前相同。您使用的是
xsi:schemaLocation
就像它是xsi:noNamespaceSchemaLocation
一样
而不是
xsi:schemaLocation="http://www.statistik.at/GBS-Schema/LHD/LHD-V55_kennsatz-monat.xsd"
使用
也就是说,使用一对空格分隔的
另见
在简化的示例中,存在几个问题,至少包括:
- XSD缺少
targetNamespace
- XSD引用了lhd:finanzjahr,但没有定义它
- XML不使用URL符号来引用XSD
在这个答案的帮助下,我解决了我的问题。这是我使用的代码:
Public Sub CheckLHDModule()
Dim docum
Set docum = CreateObject("MSXML2.DOMDocument.6.0")
Call docum.Load("C:\Temp\LHD-V55-Monat-Beispiel.xml")
Dim dParseError
Set dParseError = docum.validate()
If dParseError.ErrorCode <> 0 Then
Call MsgBox("Fehler " & dParseError.ErrorCode & ": '" & dParseError.Reason & "' bei XML-Validierung. ")
End If
Set dParseError = docum.validateNode(docum.ChildNodes.Item(1))
If dParseError.ErrorCode <> 0 Then
Call MsgBox("Fehler " & dParseError.ErrorCode & ": '" & dParseError.Reason & "' bei XML-Validierung. ")
End If
End Sub
Dim objSchemaCache
Set objSchemaCache = CreateObject("MSXML2.XMLSchemaCache.6.0")
objSchemaCache.Add "http://www.statistik.gv.at/LHD-V55/Schema", "http://www.statistik.at/GBS-Schema/LHD/LHD-V55_kennsatz-monat.xsd"
Dim docum
Set docum = CreateObject("MSXML2.DOMDocument.6.0")
Call docum.Load("C:\Temp\LHD-V55-Monat-Beispiel.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. ")
End If
Set dParseError = docum.validateNode(docum.ChildNodes.Item(1))
Stop
If dParseError.ErrorCode <> 0 Then
Call MsgBox("Fehler " & dParseError.ErrorCode & ": '" & dParseError.Reason & "' bei XML-Validierung. ")
End If
Dim objSchemaCache
设置objSchemaCache=CreateObject(“MSXML2.XMLSchemaCache.6.0”)
objSchemaCache.Add“http://www.statistik.gv.at/LHD-V55/Schema", "http://www.statistik.at/GBS-Schema/LHD/LHD-V55_kennsatz-monat.xsd"
暗docum
Set docum=CreateObject(“MSXML2.DOMDocument.6.0”)
调用docum.Load(“C:\Temp\LHD-V55-Monat-beispel.xml”)
设置docum.Schemas=objSchemaCache
暗光雷达
设置dParseError=docum.validate()
停止
如果dParseError.ErrorCode为0,则
调用MsgBox(“Fehler”&dParseError.ErrorCode&“:”&dParseError.Reason&“bei-XML-Validierung.”)
如果结束
设置dParseError=docum.validateNode(docum.ChildNodes.Item(1))
停止
如果dParseError.ErrorCode为0,则
调用MsgBox(“Fehler”&dParseError.ErrorCode&“:”&dParseError.Reason&“bei-XML-Validierung.”)
如果结束
您必须将模式单独加载到XMLSchemaCache中,并在DOMDocument中进行设置。很抱歉,使用xsi:schemaLocation=“xsi:schemaLocation=”“”没有任何区别。我会将此编辑到我的问题中。您的评论中的
xsi:schemaLocation
与我在此答案中建议的不匹配。@kjhughes:这是因为在评论中显示的链接不同。看看我编辑的问题。这是我使用的一行。好的,但请注意,您可以(也应该)使用记号标记来格式化注释中的代码,以避免此类问题。如果此快速抽查修复程序不适用于您,您需要创建一个以可复制方式显示问题的。期望有人试图帮助您浏览或查找大量的import
和include
依赖项(即使它们都可以访问)是不合理的。
<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>
xsi:schemaLocation="http://www.statistik.at/GBS-Schema/LHD/LHD-V55_kennsatz-monat.xsd"
xsi:schemaLocation="http://www.statistik.gv.at/LHD-V55/Schema
http://www.statistik.at/GBS-Schema/LHD/LHD-V55_kennsatz-monat.xsd"
xsi:schemaLocation="NAMESPACE_VALUE SCHEMA_LOCATION"
Dim objSchemaCache
Set objSchemaCache = CreateObject("MSXML2.XMLSchemaCache.6.0")
objSchemaCache.Add "http://www.statistik.gv.at/LHD-V55/Schema", "http://www.statistik.at/GBS-Schema/LHD/LHD-V55_kennsatz-monat.xsd"
Dim docum
Set docum = CreateObject("MSXML2.DOMDocument.6.0")
Call docum.Load("C:\Temp\LHD-V55-Monat-Beispiel.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. ")
End If
Set dParseError = docum.validateNode(docum.ChildNodes.Item(1))
Stop
If dParseError.ErrorCode <> 0 Then
Call MsgBox("Fehler " & dParseError.ErrorCode & ": '" & dParseError.Reason & "' bei XML-Validierung. ")
End If