我正在开发一个使用autogenereted vb类的项目。我想将此类序列化为xml文件。 当我针对我的xsd fil验证我的xml文件时,我收到一个错误:无法找到元素声明'消息'。
我的xsd看起来像这样:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tera="http://tera.net/xsd/data"
xmlns:ns1="http://tera.net/xsd/Company-dok/note/2010"><xsd:element name="Message"
type="TestMessage" /><xsd:complexType
name="TestMessage"><xsd:sequence><xsd:element name="Detail" type="Detail" /> ........
我的xml看起来像:
<?xml version="1.0" encoding="utf-8"?>
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:ska:test:micro:v2">
但它应该是这样的:
<?xml version="1.0" encoding="UTF-8" ?>
<message xmlns="urn:ska:test:micro:v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:schemaLocation="urn:ska:test:micro:v2 test_v2_0.xsd">
我错过了什么?
当我将我的类序列化为xml时,我希望我的elemts属性以给定的顺序出现在我的xml中。如果我自己生成自动生成的文件,我可以解决这个问题。如果我在自动生成的文件中的类中创建属性的顺序,则xml中的属性将以正确的顺序显示。 但我不想更改自动生成的文件,我该怎么办?
我的自制文件的一部分:
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:ska:test:micro:v2")> _
Partial Public Class Detail
Private NameField As String
Private PhoneField() As Oppgavegiver
'''<remarks/>
Public Property name() As String
End Property
'''<remarks/>
Public Property phone() As integer
End Property
如果我将Phonefield放在nameField和phone属性顶部的name属性之上,我会在xml中获得正确的顺序,但我不想更改sutogenerated文件。
我该怎么做?
提前致谢!
答案 0 :(得分:0)
错误意味着对于您正在验证的XML,message
没有与您显示的XSD匹配的命名空间(因为它没有targetNamespace
) 。但是,第一个发布的XML通过message
将urn:ska:test:micro:v2
元素放入xmlns="urn:ska:test:micro:v2"
命名空间,这完全令人困惑,因为您的XSD没有targetNamespace。 “翻译”中有些东西丢失了,所以你应该查看你的帖子。
否则,你似乎在问两件事:
(1)如何将schemaLocation属性添加到生成的XML中。 this post of SO的答案应该为您提供有关如何操作的足够信息(自定义序列化程序或部分类)。
(2)如何确保正确订购颗粒。答案是使用xsd.exe command line中的/order
开关。