我正在尝试通过XSD架构获取一个表格,并将表格写入经过验证的XML。
StreamReader sr = new StreamReader(ms);
ds.ReadXmlSchema("myschema.xsd");
//<some data filling>
ds.WriteXml("output.xml");
输出文件看起来没问题,但仔细观察后我发现它不会验证,因为ds.WriteXml显然首先写入所有非复杂类型,然后是复杂类型。 (实际上是数据集中的DataTables)
当前生成的输出文件(为简洁起见,已简化):
<Main>
<Element_A>Value_A</Element_A>
<Element_B>Value_B></Element_B>
<Complex_Type_1>.... </Complex_Type_1>
</Main>
实际上它应该生成:
<Main>
<Element_A>Value_A</Element_A>
<Complex_Type_1>.... </Complex_Type_1>
<Element_B>Value_B></Element_B>
</Main>
有没有办法影响子元素的编写顺序?
我正在使用的(再次,大大简化的)XSD文件清楚地说明了正确序列中的元素:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Main">
<xs:complexType>
<xs:sequence>
<xs:element name="Element_A">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="30"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Complex_Type_1">
<xs:complexType>
<xs:sequence>
.......
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Element_B" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>