【发布时间】:2020-05-30 05:39:06
【问题描述】:
我有一个类似下面的 XML 文件:
<root>
<data label="product data" min="0" max="10">
<option>
<id>1</id>
<name>Name1</name>
</option>
<option>
<id>2</id>
<name>Name2</name>
</option>
<option>
<id>3</id>
<name>Name3</name>
</option>
</data>
</root>
我需要同时检索data 属性和选项列表。
我试过了:
[XmlRoot(ElementName = "root")]
public class Data
{
// Retreive data attributes
[XmlElement(ElementName = "data")]
public Options Attributes { get; set; }
// Retrieve option list
[XmlArray("data")]
[XmlArrayItem("option", Type = typeof(GeneralOptions))]
public GeneralOptions[] Options { get; set; }
}
可选课程:
选项
public class Options
{
[XmlAttribute("label")]
public string Label{ get; set; }
[XmlAttribute("min")]
public string Min{ get; set; }
[XmlAttribute("max")]
public string Max{ get; set; }
}
常规选项
public class GeneralOptions
{
[XmlElement(ElementName = "id")]
public string Id { get; set; }
[XmlElement(ElementName = "name")]
public string Name{ get; set; }
}
但是当我尝试反序列化对象时,它会启动以下异常:
命名空间“”中的 XML 元素“数据”已存在于当前范围内。使用 XML 属性为元素指定另一个 XML 名称或命名空间。
我想问题是我试图“两次”检索相同的元素。但我需要检索这两件事。我不能使用[Attribute] 的东西,因为有几个属性要检索,我需要使用几个具有相同格式的 XML 元素来执行此操作,并且我想重用它。
那么,我怎样才能同时检索它们呢?
【问题讨论】:
标签: c# xml xml-parsing xmlserializer xml-attribute