我创建了一个XSD并在该.xsd文件之上运行了XSD.exe。似乎我的简单类型仅限于枚举值,不会在输出的.cs文件中生成为枚举。
例如,我的xsd看起来像这样:
<xs:element name="ItemList" nillable="false">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="Item" type="ItemType" minOccurs="1" maxOccurs="unbounded" nillable="false">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ItemType">
<xs:sequence maxOccurs="1" minOccurs="1">
<!-- other complex types, etc... -->
</xs:sequence>
<xs:attribute name="Market" type="MarketType" use="required">
</xs:attribute>
<xs:attribute name="Category" type="CategoryType" use="required" />
</xs:complexType>
<xs:simpleType name="CategoryType">
<xs:restriction base="xs:string">
<xs:enumeration value="Mild" />
<xs:enumeration value="Hot" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="MarketType">
<xs:restriction base="xs:string">
<xs:enumeration value="Weak" />
<xs:enumeration value="Strong" />
</xs:restriction>
</xs:simpleType>
当我运行XSD.exe时,输出的.cs文件不应该为我的每个简单类型都有一个xml enum属性吗? This link says that it should。也许我做错了什么?在我的.cs文件中没有我看到枚举。
如果您需要更多信息,请告诉我我能提供的信息。
感谢。
更新
当我应该创建一个类(/ c开关)时,我似乎正在使用XSD.exe来创建数据集(/ d开关)。我设置它后生成一个类,它工作正常。
答案 0 :(得分:2)
我不知道您的情况会发生什么 - 我将您的代码复制到enum.xsd
并在其上运行xsd.exe
- 结果如下:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4016
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Xml.Serialization;
//
// This source code was auto-generated by xsd, Version=2.0.50727.3038.
//
/// <remarks/>
[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 ItemList {
private ItemType[] itemField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Item", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public ItemType[] Item {
get {
return this.itemField;
}
set {
this.itemField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class ItemType {
private MarketType marketField;
private CategoryType categoryField;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public MarketType Market {
get {
return this.marketField;
}
set {
this.marketField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public CategoryType Category {
get {
return this.categoryField;
}
set {
this.categoryField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
public enum MarketType {
/// <remarks/>
Weak,
/// <remarks/>
Strong,
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
public enum CategoryType {
/// <remarks/>
Mild,
/// <remarks/>
Hot,
}
我确实得到了两个枚举CategoryType
和MarketType
。
我所做的只是将您的XSD代码放入<xsl:schema>
标记:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="TheParentNode" xmlns:xs="http://www.w3.org/2001/XMLSchema">
..... (inserted your code here) .......
</xs:schema>
然后我在其上运行了XSD.EXE:
xsd.exe enum.xsd /c
创建了上面显示的enum.cs
文件。
你有什么版本的XSD.EXE?您使用的是什么版本的.NET?
马克
答案 1 :(得分:1)
<xs:schema
elementFormDefault ="qualified"
targetNamespace ="urn:Jon.Stackoverflow._2009aug.Example"
xmlns:tns ="urn:Jon.Stackoverflow._2009aug.Example"
xmlns:xs ="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="ItemList" nillable="false">
<xs:complexType>
<xs:sequence minOccurs="1"
maxOccurs="1">
<xs:element name="Item"
type="tns:ItemType"
minOccurs="1"
maxOccurs="unbounded"
nillable="false">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ItemType">
<xs:sequence maxOccurs="1" minOccurs="1">
<xs:element type="xs:int" name="num"/>
</xs:sequence>
<xs:attribute name="Market"
type="tns:MarketType"
use="required">
</xs:attribute>
<xs:attribute name="Category" type="tns:CategoryType" use="required" />
</xs:complexType>
<xs:simpleType name="CategoryType">
<xs:restriction base="xs:string">
<xs:enumeration value="Mild" />
<xs:enumeration value="Hot" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="MarketType">
<xs:restriction base="xs:string">
<xs:enumeration value="Weak" />
<xs:enumeration value="Strong" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
它生成(部分)
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:Jon.Stackoverflow._2009aug.Example")]
public enum MarketType {
/// <remarks/>
Weak,
/// <remarks/>
Strong,
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:Jon.Stackoverflow._2009aug.Example")]
public enum CategoryType {
/// <remarks/>
Mild,
/// <remarks/>
Hot,
}
答案 2 :(得分:0)
如果架构中的任何字段未使用已定义的 simpleType ,则其枚举将不会在生成的.cs文件中显示。
同样,如果使用联合且类型为 xs:string ,则其枚举仍未在结果中显示.cs文件。
但是,如果架构包含具有 simpleType 的字段(即不在 union 中具有其他类型),则它将在输出中表示.cs文件。