0

当我读取带有内联模式验证的 xml 文件时出现此错误。XML 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<SysConfig xmlns="PM-NameSpace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SysConfig.xsd">
...
</SysConfig>

XSD 文件与 XML 文件位于同一文件夹中,名为“SysConfig.xsd”,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="PM-NameSpace" targetNamespace="PM-NameSpace">
...
</xs:schema>

我想在代码中进行内联模式验证,所以我的 C# 看起来像这样:

XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.ValidationType = ValidationType.Schema;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
xmlReaderSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
xmlReaderSettings.ValidationEventHandler += new ValidationEventHandler(handler);
XmlReader xmlReader = XmlReader.Create(sysConfigPath, xmlReaderSettings);
XmlDocument sysConfigXmlDocument = new XmlDocument();
sysConfigXmlDocument.Load(xmlReader);

一旦调用 Load(最后一行),就会调用验证事件处理程序,实际消息是:

无法加载命名空间“ ”的架构 - targetNamespace 参数“ ”应该与架构的 targetNamespace 'PM-NameSpace' 的值相同。

这似乎表明某些东西正在使用默认 ('') 命名空间,但我已经非常仔细地指定了 xlmns 和目标命名空间。我不明白“targetNamespace 参数'' ...”的错误消息是什么意思 - 指定了 targetNamespace属性并且不是空白('') - 我不知道xml 术语中的“参数”是什么- 或者它是指 C# 代码中(或缺失)的东西?任何人都可以解释一下吗?

4

1 回答 1

1

我没有遇到过这个问题,但我相信发生这种情况的原因xsi:noNamespaceSchemaLocation是为了实际指示没有命名空间的 XML 的 XSD 位置。您的 XML 实际上有一个命名空间,所以我相信您应该将该属性替换为:

xsi:schemaLocation="PM-NameSpace SysConfig.xsd"
于 2013-01-11T18:04:24.747 回答