xml からクラスを生成しようとしました。最初に、xml から xsd を生成しました
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="GeneralTranslation">
<xs:complexType>
<xs:sequence>
<xs:element name="Day" type="xs:string" />
<xs:element name="Month" type="xs:string" />
<xs:element name="Year" type="xs:string" />
<xs:element name="Submit" type="xs:string" />
<xs:element name="Select" type="xs:string" />
<xs:element name="TradingExp">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Option" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="LevelOfInvestment">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Option" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
次に、xsd ユーティリティを使用して、次のクラスを生成しました
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class GeneralTranslation {
private string dayField;
private string monthField;
private string yearField;
private string submitField;
private string selectField;
private string[] tradingExpField;
private string[] levelOfInvestmentField;
/// <remarks/>
public string Day {
get {
return this.dayField;
}
set {
this.dayField = value;
}
}
/// <remarks/>
public string Month {
get {
return this.monthField;
}
set {
this.monthField = value;
}
}
/// <remarks/>
public string Year {
get {
return this.yearField;
}
set {
this.yearField = value;
}
}
/// <remarks/>
public string Submit {
get {
return this.submitField;
}
set {
this.submitField = value;
}
}
/// <remarks/>
public string Select {
get {
return this.selectField;
}
set {
this.selectField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Option", IsNullable=false)]
public string[] TradingExp {
get {
return this.tradingExpField;
}
set {
this.tradingExpField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Option", IsNullable=false)]
public string[] LevelOfInvestment {
get {
return this.levelOfInvestmentField;
}
set {
this.levelOfInvestmentField = value;
}
}
}
}
ここから文字列配列を取得できますが、リストは取得できません
以下にハウツーがあります:
- XML を Visual Studio で開く
- XML を含むタブを選択します。メイン メニューで [XML/スキーマの作成] を選択します。(スタジオがスキーム ファイルを開きます)
- xsd.exe ユーティリティを使用します。( http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx )
場合によっては、xsd で次のトリックを実行しています。
開発サイクル中にドキュメント スキーマを変更できることがわかっている場合:
プロジェクトに XSD ファイルを追加しています。プロジェクトファイルに次のセクションを追加しています
<PropertyGroup>
<WIN_SDK_PATH>$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows@CurrentInstallFolder)</WIN_SDK_PATH>
<WIN_SDK_BIN_PATH>$(WIN_SDK_PATH)bin</WIN_SDK_BIN_PATH>
<XSDUTIL>"$(WIN_SDK_BIN_PATH)\xsd.exe"</XSDUTIL>
</PropertyGroup>
<Target Name="XSD2CS">
<Exec Command="$(XSDUTIL) "$(ProjectDir)XMLSchema1.xsd" /classes /out:"$(ProjectDir)obj" /namespace:$(RootNamespace).XSD" />
</Target>
<Target Name="BeforeBuild" DependsOnTargets="XSD2CS">
</Target>
プロジェクト ファイルを含む のもう 1 つのセクション
<Compile Include="$(ProjectDir)obj\XMLSchema1.cs">
<SubType>Code</SubType>
</Compile>
プロジェクトをコンパイルするたびに、xsd の最新の実際のバージョンに対応するクラスを取得しています。したがって、私が世話をする必要があるのは、正しい完全な xsd ファイルだけです。