XmlSchemaExeption错误消息

时间:2013-10-11 08:13:37

标签: xml xsd xml-validation

我对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”)。

我错过了什么?

1 个答案:

答案 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'的声明。

也许这句话更清楚。