1

我的数据的子元素直接从根元素中写入,而不是从模式中的父元素中写入。

我的xsd:

<xs:schema xmlns="MyNameSpace" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="MyNameSpace" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
    <xs:import/>
    <xs:element name="DataFile">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="LastUpdatedBy" type="xs:string"/>
                <xs:element name="DateTimeLastUpdate" type="xs:dateTime"/>
                <xs:element name="DataValues" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:all>
                            <xs:element name="Num1" type="xs:int"/>
                            <xs:element name="Num2" type="xs:int"/>
                        </xs:all>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我的输入文件:

<DataFile xmlns="MyNameSpace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="MyNameSpace MySchema.xsd">
    <LastUpdatedBy>Dan</LastUpdatedBy>
    <DateTimeLastUpdate>2009-12-07T16:40:30.0Z</DateTimeLastUpdate>
    <DataValues>
        <Num1>0</Num1>
        <Num2>0</Num2>
    </DataValues>
    <DataValues>
        <Num1>2</Num1>
        <Num2>0</Num2>
    </DataValues>
</DataFile>

什么被保存MyDataSet.WriteXml(filename)

<DataFile xmlns="MyNameSpace">
    <LastUpdatedBy>Dan</LastUpdatedBy>
    <DateTimeLastUpdate>2009-12-07T16:40:30.0Z</DateTimeLastUpdate>
    <DataValues>
        <Num1>0</Num1>
        <Num2>0</Num2>
    </DataValues>
    <DataValues>
        <Num1>2</Num1>
        <Num2>0</Num2>
    </DataValues>
</DataFile>

没有写入 xmlns:xsi 和 xsi:schemaLocation 属性。我需要做些什么来保护它们?

4

1 回答 1

1

关于什么MyDataSet.WriteXml(filename, XmlWriteMode.WriteSchema);

尽管这将包括整个架构。


看起来 DataSet 只是不支持这一点。您可以使用 NameSpace 和 Prefix 属性,但您只能控制 1 个 Namespace,而没有 xsi:schemaLocation。

也许XmlDataDocument可能有用?但请注意,它在 Fx4 中已被标记为过时

var doc = new System.Xml.XmlDataDocument(dataSet1);
于 2009-12-11T21:10:28.087 回答