在 xsd class 中访问 Xml 元素属性
Accessing Xml Element Attribute in a xsd class
我有一个来自 xsd 的生成的 c# class。当我想给元素赋值时
result res = new result();
res.feed = "123132";
// 这行得通
res.data 在这里我找不到 id 和值,我该怎么做,例如 res.data.id="something"
我有一个 xml :
<result>
<feed></feed>
<status></status>
<data>
<id></id>
<value></value>
<id></id>
<value></value>
</data>
</result>
生成这个 xsd :
<xs:element name="result">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="feed"/>
<xs:element type="xs:string" name="status"/>
<xs:element name="data">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element type="xs:string" name="id"/>
<xs:element type="xs:string" name="value"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
并且使用 xsd.exe 我已经为它生成了 class
public partial class result {
private string feedField;
private string statusField;
private resultData dataField;
/// <remarks/>
public string feed {
get {
return this.feedField;
}
set {
this.feedField = value;
}
}
/// <remarks/>
public string status {
get {
return this.statusField;
}
set {
this.statusField = value;
}
}
/// <remarks/>
public resultData data {
get {
return this.dataField;
}
set {
this.dataField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class resultData {
private string[] itemsField;
private ItemsChoiceType[] itemsElementNameField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("id", typeof(string))]
[System.Xml.Serialization.XmlElementAttribute("value", typeof(string))]
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
public string[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("ItemsElementName")]
[System.Xml.Serialization.XmlIgnoreAttribute()]
public ItemsChoiceType[] ItemsElementName {
get {
return this.itemsElementNameField;
}
set {
this.itemsElementNameField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)]
public enum ItemsChoiceType {
/// <remarks/>
id,
/// <remarks/>
value,
}
看来您必须执行以下操作
res.data = new resultData();
res.data.ItemsElementName = new []
{
ItemsChoiceType.id,
ItemsChoiceType.value,
ItemsChoiceType.id,
ItemsChoiceType.value,
};
res.data.Items = new []
{
"id 1",
"value 1",
"id 2",
"value 2",
};
基本上你必须设置每个数组来包含类型和对应的值。当您创建数组时,它们应该具有相同的长度,并且类型和值应该位于相同的位置。
然而,如果你想要 id-value 对,你应该重新考虑你的 XML 的结构,因为目前它只允许你输入 ids 或只是值,并且不保证顺序或者会有每个的数量相同。也许像下面这样的东西更像你想要的。
<result>
<feed></feed>
<status></status>
<data>
<dataItem>
<id></id>
<value></value>
</dataItem>
<dataItem>
<id></id>
<value></value>
</dataItem>
</data>
</result>
我有一个来自 xsd 的生成的 c# class。当我想给元素赋值时
result res = new result();
res.feed = "123132";
// 这行得通
res.data 在这里我找不到 id 和值,我该怎么做,例如 res.data.id="something"
我有一个 xml :
<result>
<feed></feed>
<status></status>
<data>
<id></id>
<value></value>
<id></id>
<value></value>
</data>
</result>
生成这个 xsd :
<xs:element name="result">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="feed"/>
<xs:element type="xs:string" name="status"/>
<xs:element name="data">
<xs:complexType>
<xs:choice maxOccurs="unbounded" minOccurs="0">
<xs:element type="xs:string" name="id"/>
<xs:element type="xs:string" name="value"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
并且使用 xsd.exe 我已经为它生成了 class
public partial class result {
private string feedField;
private string statusField;
private resultData dataField;
/// <remarks/>
public string feed {
get {
return this.feedField;
}
set {
this.feedField = value;
}
}
/// <remarks/>
public string status {
get {
return this.statusField;
}
set {
this.statusField = value;
}
}
/// <remarks/>
public resultData data {
get {
return this.dataField;
}
set {
this.dataField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class resultData {
private string[] itemsField;
private ItemsChoiceType[] itemsElementNameField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("id", typeof(string))]
[System.Xml.Serialization.XmlElementAttribute("value", typeof(string))]
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
public string[] Items {
get {
return this.itemsField;
}
set {
this.itemsField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("ItemsElementName")]
[System.Xml.Serialization.XmlIgnoreAttribute()]
public ItemsChoiceType[] ItemsElementName {
get {
return this.itemsElementNameField;
}
set {
this.itemsElementNameField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)]
public enum ItemsChoiceType {
/// <remarks/>
id,
/// <remarks/>
value,
}
看来您必须执行以下操作
res.data = new resultData();
res.data.ItemsElementName = new []
{
ItemsChoiceType.id,
ItemsChoiceType.value,
ItemsChoiceType.id,
ItemsChoiceType.value,
};
res.data.Items = new []
{
"id 1",
"value 1",
"id 2",
"value 2",
};
基本上你必须设置每个数组来包含类型和对应的值。当您创建数组时,它们应该具有相同的长度,并且类型和值应该位于相同的位置。
然而,如果你想要 id-value 对,你应该重新考虑你的 XML 的结构,因为目前它只允许你输入 ids 或只是值,并且不保证顺序或者会有每个的数量相同。也许像下面这样的东西更像你想要的。
<result>
<feed></feed>
<status></status>
<data>
<dataItem>
<id></id>
<value></value>
</dataItem>
<dataItem>
<id></id>
<value></value>
</dataItem>
</data>
</result>