一个xml的xsd验证可以通过XMLSpy,但是用C#程序来做却验证失败

mmmsdare 2014-05-12 05:55:02
我有个很简单的xml文件:

<?xml version="1.0"?>
<x:a xmlns:x="http://my.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="d:\abc.xsd">
<x:b/>
</x:a>

其中引用的d:\abc.xsd内容如下:

<?xml version="1.0" encoding="utf-8"?>
<x:schema xmlns:x="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"
targetNamespace="http://my.com">
<x:element name="a"/>
<x:element name="b"/>
</x:schema>

XMLSpy验证都能通过,但是我自己写一个C#程序:

try
{
var doc = new XmlDocument();
doc.Load(@"d:\abc.xml");
var schema = new XmlSchemaSet();
schema.Add("", XmlReader.Create(@"d:\abc.xsd"));
var eventHandler = new ValidationEventHandler((object sender, ValidationEventArgs e) =>
{
Console.WriteLine(e.Severity + e.Message);
});
doc.Schemas = schema;
doc.Validate(eventHandler);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}

运行结果是进入catch语句并打印:
The targetNamespace parameter '' should be the same value as the targetNamespace 'http://my.com' of the schema.
为什么会这样呢?
...全文
53 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
iyomumx 2014-05-13
schema.Add("", XmlReader.Create(@"d:\abc.xsd"));
这句出错了,和XML本身无关,改成
schema.Add(XmlSchema.Read(XmlReader.Create(@"d:\abc.xsd"), (_, __)=>{}));
就好了
回复
mmmsdare 2014-05-13
求各位大侠,bz帮忙看一下哈!
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2014-05-12 05:55
社区公告

让您成为最强悍的C#开发者