如何通过强制创建所有必需元素来执行 XML 序列化
我已经使用 xsd-tool 从某些 xml 方案生成了 cs-classes。 该方案是从 uml 类描述生成的非常复杂的方案。 现在我编写了一个简单的测试来确保生成的 xsd 类的功能。 该测试使用 XmlSerializer
创建 xml 文件。
在我的 XSD 方案中,有一些强制性元素(xsd 默认使用 minocc=1
和 maxocc=1
进行定义)。
例如(简化):
<xs:element name="order">
<xs:complexType>
...
<xs:element name="orderId" type="string"/>
<xs:element name="material" type="Material"/>
...
<xs:complexType>
Material 是一个复杂类型,由多个元素组成。这是订单的一部分。
这些元素应始终存在于生成的 xml 文件中,即使它们为空或仅包含空元素。现在,如果我将类实例序列化为 xml 文件,则只有类属性包含值的元素才会出现。如果我设置 orderId,则会显示 orderId 元素,但不会显示材料元素,因为在我的类实例中它为 null。因此,我的 xml 文件对于 xsd 架构无效。
您知道如何在序列化过程中使用我的 xsd 文件验证生成的 xml 文件吗?有没有办法告诉 XmlSerializer 它应该始终生成必需元素(可能具有默认值)? 或者有没有办法验证应该序列化的类实例的结构?
i have generated a cs-classes with the xsd-tool from some xml scheme.
The scheme is a very complex scheme generated from uml-class descriptions.
Now I have written a simple test to ensure the functionality of the generated xsd-classes.
The test uses XmlSerializer
to create the xml-file.
In my XSD-scheme there are some obligatory elements (definition with minocc=1
and maxocc=1
by xsd-default).
For example (simplified):
<xs:element name="order">
<xs:complexType>
...
<xs:element name="orderId" type="string"/>
<xs:element name="material" type="Material"/>
...
<xs:complexType>
Material is a complex type, which consists of several elements. It is part of order.
These elements should always exists in the resulting xml-file, even if they are empty or contains only empty elements. Now, if I serialize a class instance to an xml-file, only the elements appear where the class-propertys contain a value. If I set orderId the orderId-element appears, but not the material-element because in my class instance it's null. As a result my xml-file is not valid to the xsd-schema.
Do you have an idea how i can validate the resulting xml-file with my xsd file during serialization? Is there a way to tell XmlSerializer
that it should always generate obligatory elements (perhaps with a default value)?
Or is there a way to validate the structure of the class instance that should be serialized?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您无法自动生成元素来满足您所需的规则。
关于第二个问题,您可以使用 XmlReader 和 XmlSchema 对象验证生成的 xml。
一个小例子如下所示:
此示例采用一个 TextReader(可以是 StreamReader、StringReader 等)和一个 XmlSchema 对象(您可以从 xsd 文件或其他文件构造一个对象 - 检查它的文档)并返回一个列表验证错误。
You cannot generate automatically elements to fulfill your required rules.
On your second question you can validate the generated xml with XmlReader and XmlSchema objects.
A small example would look like this:
This example takes a TextReader (can be a StreamReader, StringReader etc. ) and an XmlSchema object (you can construct one from the xsd file or whatever - check the documentation for it) and returns a list of validation errors.