我正在尝试使用FCA在线提供的架构验证XML文档。
在xml文件中,模式在标题中定义如下:
<PSD007-MortgagePerformanceSalesData xmlns = "urn:fsa-gov-uk:MER:PSD007:1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:fsa-gov-uk:MER:PSD007:1
http://www.fsa.gov.uk/mer/drg/PSD007/v1-3/PSD007-Schema.xsd"
我希望为用户提供一个工具,用于在将xml文件加载到FCA报告系统之前验证宏生成的xml。
所以我从tomalak
中的SO: MSXML VBA: Validating XML against XSD: “The '' namespace provided differs from the schema's targetNamespace.”回答中获取了代码以下是我修改后的代码版本:
Sub XSD_Validation()
Dim xmlDoc As MSXML2.DOMDocument60
Dim objSchemaCache As New XMLSchemaCache60
Dim objErr As MSXML2.IXMLDOMParseError
objSchemaCache.Add "http://www.w3.org/2001/XMLSchema-instance" & Chr
(34) & " xsi:schemaLocation=" & Chr(34) & "urn:fsa-gov-uk:MER:PSD007:1
http://www.fsa.gov.uk/mer/drg/PSD007/v1-3/PSD007-Schema.xsd", LoadXmlFile
("C:\PRA Export Data Jul 17 2015.xml")
Set xmlDoc = LoadXmlFile("C:\PRA Export Data Jul 17 2015.xml")
Set xmlDoc.Schemas = objSchemaCache
Set objErr = xmlDoc.Validate()
If objErr.ErrorCode = 0 Then
Debug.Print "No errors found"
Else
Debug.Print "Error parser: " & objErr.ErrorCode & "; " & objErr.reason
End If
End Sub
当我运行代码时,我得到以下错误:
PRA%20Export%20Data%20Jul%2017%202015.xml#/ PSD007-MortgagePerformanceSalesData 架构中根元素的定义不正确。
我在这里错过了什么或做错了什么?
答案 0 :(得分:0)
在仔细检查了托拉马克就另一个问题提供的答案后,我解决了这个问题。
实际上objSchemaCache.Add
的第一个参数应该是目标命名空间,它是 urn:fsa-gov-
英国:MER:PSD007:1 ,第二个参数应该是模式文件的位置 http://www.fsa.gov.uk/mer/drg/PSD007/v1-3/PSD007-Schema.xsd
所以当我用
时 objSchemaCache.Add "urn:fsa-gov-
uk:MER:PSD007:1", "http://www.fsa.gov.uk/mer/drg/PSD007/v1-3/PSD007-Schema.xsd"
它有效,现在告诉我文件没有验证(这是正确的!)