2017-11-07 2 views
1

Wenn ich folgende Snippet:getxmlschema von DataSet Verwenden Sequenz insted die Wahl

static DataTable Table() 
    { 
     DataTable table = new DataTable("Prescription"); 
     table.Columns.Add("Dosage", typeof(int)); 
     table.Columns.Add("Drug", typeof(string)); 
     table.Columns.Add("Patient", typeof(string)); 
     table.Columns.Add("Date", typeof(DateTime)); 

     return table; 
    } 


     DataSet set = new DataSet("Hospital"); 
     set.Tables.Add(Table()); 
     Console.WriteLine(set.GetXmlSchema()); 

Das Ergebnis ist:

<?xml version="1.0" encoding="utf-16"?> 
<xs:schema id="Hospital" xmlns="" xmlns:xs="" xmlns:msdata=""> 
    <xs:element name="Hospital" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
    <xs:complexType> 
     <xs:**choice** minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="Prescription"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Dosage" type="xs:int" minOccurs="0" /> 
       <xs:element name="Drug" type="xs:string" minOccurs="0" /> 
       <xs:element name="Patient" type="xs:string" minOccurs="0" /> 
       <xs:element name="Date" type="xs:dateTime" minOccurs="0" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:**choice**> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

In oder diese XSD-Datei in Excel zu verwenden, ich ersetzen muß

<xs:choice minOccurs="0" maxOccurs="unbounded">...</xs:choice> 

zu

<xs:sequence minOccurs="0" maxOccurs="unbounded">...</xs:sequence> 

Wie setze ich Dataset, um "Sequenz" statt "Auswahl" in xsd zu bekommen?

Antwort

1

Ich kann keine Möglichkeit sehen, die in GetXmlSchema integrierte Funktionalität an Ihre Bedürfnisse anzupassen. Natürlich können Sie eine neue Klasse erstellen, die von Dataset abgeleitet ist, wo Sie Ihre spezielle Implementierung von GetXmlSchema schreiben. Minimal brauchen Sie nur zwei Methoden:

public class DataSetExcel : DataSet 
{ 
    public DataSetExcel(string dataSetName) : base() 
    { 
     this.DataSetName = dataSetName; 
    } 
    public string GetXMLSchema() 
    { 
     string result = base.GetXmlSchema(); 
     result = result.Replace("xs:choice", "xs:sequence"); 
     return result; 
    } 
} 

Anf dann diese Klasse verwenden, wenn Sie diese Funktionalität benötigen

DataSetExcel set = new DataSetExcel("Hospital"); 
set.Tables.Add(Table()); 
Console.WriteLine(set.GetXmlSchema()); 
Verwandte Themen