我对XmlSchemaException向我抛出的消息感到困惑。让我提供一些背景信息。 在我的应用程序中,我使用两种类型的XML参考表:“IFU”和“CC”,它们都定义了自己的模式。当我加载文件时,我通过使用这些模式验证它们,并且它完美地工作。直到出现问题。
当应用程序期望IFU ref表(选择IFU Schema)并且我加载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”)。
我错过了什么?
答案 0 :(得分:0)
您所描述的是正常诊断。
当应用程序期待IFU ref表(IFU Schema 选中)然后我加载CC表,检测到错误,行 数字适合(2),但消息说:
e.Message = "The "CCReferenceTable" element is not declared."
当使用IfuReferenceTable
模式的验证解析器(正如您所说的那样选择“IFU模式”)遇到没有定义的CCReferenceTable
元素时,它会正确地抱怨它。 / p>
以这种方式思考:当解析器看到CCReferenceTable
时,它会尝试查找它对CCReferenceTable
的了解。如果找不到CCReferenceTable
的任何内容,它会通过上述消息通知您。
Xerces-J会这样说:
找不到元素'CCReferenceTable'的声明。
也许这句话更清楚。