一个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.
为什么会这样呢?
...全文
107 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
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帮忙看一下哈!

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧