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

发布于 2024-11-15 16:02:48 字数 628 浏览 3 评论 0原文

我使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青朷 2024-11-22 16:02:49

该方法是正确的,但 XSD 实际上并未被读取。我纠正了这个问题并且它按预期工作。

The approach was correct, but the XSD was not infact being read. I corrected this and it worked as expected.

丑丑阿 2024-11-22 16:02:48

在 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。

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).

<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>

This way, the validation tool knows where to find your XSD to validate your XML against.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文