我对 XmlSchemaException 向我抛出的消息感到困惑。让我提供一些上下文。在我的应用程序中,我使用两种类型的 XML 引用表:“IFU”和“CC”,它们都定义了自己的模式。当我加载文件时,我使用这些模式来验证它们并且它工作得很好。直到出现问题。
当应用程序需要 IFU ref 表(已选择 IFU 模式)而我加载 CC 表时,检测到错误,行号适合 (2),但消息显示:
e.Message = "未声明“CCReferenceTable”元素。"
虽然它应该说
e.Message = "未声明“IFUReferenceTable”元素。"
现在,代码片段:
LoadXML 例程
public XmlDocument LoadXML(string filePath, string schemaFilePath)
{
Directory.SetCurrentDirectory(System.IO.Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory));
if (!DoesFileExist(filePath))
throw new Exception(String.Format("File {0} does not exist.", filePath));
if (!DoesFileExist(schemaFilePath))
throw new Exception(String.Format("File {0} does not exist.", schemaFilePath));
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, schemaFilePath);
settings.ValidationType = ValidationType.Schema;
XmlDocument document = new XmlDocument();
using (XmlReader reader = XmlReader.Create(filePath, settings))
{
document.Load(reader);
}
return document;
}
XmlSchema
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="IfuReferenceTable">
//////////Other content
</xs:element>
</xs:schema>
XML 参考表
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<IfuReferenceTable>
//////////Other content
</IfuReferenceTable>
根节点的 CC Ref 表看起来相同(“CCRefenerceTable”而不是“IFUReferenceTable”)。
我错过了什么?