如何在C#中没有名称空间的简单XML模式验证

时间:2011-06-15 11:18:55

标签: c# xml-validation

我使用xsd.exe生成了一组类,并从生成的代码中创建了一个XML文档。我现在想要针对原始xsd验证序列化类实例。

我的XML是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   -- rest of XML document here
</MyRoot>

我的XSD是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="MyRoot" type="MyRootType"/>
   -- MyRootType definition and rest of XSD
</xs:schema>

当我尝试使用XmlReader验证XML时,出现以下错误: “未声明'MyRoot'元素。”

可能出现什么问题?

2 个答案:

答案 0 :(得分:1)

在MyRoot元素中,您需要添加XSD的位置。我还建议定义命名空间(除非你有充分的理由不这样做。)

<api:MyRoot  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
   xmlns:api='http://www.myserver.com/schema'
   xsi:schemaLocation='http://www.myserver.com/schema http://www.myserver.com/schema/websuiterecord.xsd'>
</api:MyRoot>

这样,验证工具就知道在哪里找到XSD以验证您的XML。

答案 1 :(得分:-2)

这种方法是正确的,但XSD并没有被读取。我纠正了这个问题并且按预期工作了。