2009-12-11 73 views
1

我的數據的子元素直接從根元素寫入,而不是在架構中作爲父元素的元素。由xsd.exe生成的DataSet不會寫入根元素的屬性

我的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屬性不能寫。我需要做些什麼來保護它們?

回答

1

什麼MyDataSet.WriteXml(filename, XmlWriteMode.WriteSchema);

雖然這將包括整個架構。


看起來像DataSet不支持這一點。您可以使用NameSpace和Prefix屬性,但是您只能控制1個名稱空間,並且不需要xsi:schemaLocation。可能XmlDataDocument可能是有用的嗎?但請注意,它已在Fx4中被標記爲過時

var doc = new System.Xml.XmlDataDocument(dataSet1); 
+0

這只是改變了什麼是錯的。它失去了對模式中大多數元素值的限制(由於長度的原因未在上面顯示)。然後它創建一個以MyDataSet.DataSetName命名的新頂層元素,該元素包含數據和損壞的模式。然後添加一個包含xsd except版本中所有屬性的元素,以及三個新元素:xs:schema id =「MyDataSet.DataSetName」xmlns:mstns =「MyNameSpace」xmlns:msdata =「urn:schemas-microsoft-com: xml-msdata「 – 2009-12-11 21:46:50

+0

我喜歡清理。 – 2009-12-11 22:11:34

+0

至少在默認情況下,它的功能與DataSet.WriteXml()相同 – 2009-12-14 13:43:22