targetNamespace参数应与架构的targetNamespace值相同

时间:2013-01-11 17:45:36

标签: xml xsd xml-validation xsd-validation

当我读取带有内联架构验证的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#代码中的某些内容(或从中丢失)? 任何人都可以放弃任何光明吗?

1 个答案:

答案 0 :(得分:1)

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

xsi:schemaLocation="PM-NameSpace SysConfig.xsd"