如何在 C# 中进行没有命名空间的简单 XML 模式验证
我使用 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’元素未声明。”
可能出什么问题了?
I have generated a set of classes using xsd.exe and created an XML document from the resulting generated code. I would now like to validate the serialized class instance against the original xsd.
My XML is like this:
<?xml version="1.0" encoding="UTF-8"?>
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-- rest of XML document here
</MyRoot>
My XSD is like this:
<?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>
When I try to validate the XML using a XmlReader, I get the following error:
"The 'MyRoot' element is not declared."
What could be wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
该方法是正确的,但 XSD 实际上并未被读取。我纠正了这个问题并且它按预期工作。
The approach was correct, but the XSD was not infact being read. I corrected this and it worked as expected.
在 MyRoot 元素中,您需要添加 XSD 的位置。我还建议定义名称空间(除非您有充分的理由不这样做)。
这样,验证工具就知道在哪里可以找到 XSD 来验证 XML。
In your MyRoot element, you need to add the location of the XSD. I would also recommend defining the namespace (unless you have good reason not to).
This way, the validation tool knows where to find your XSD to validate your XML against.