如何解析具有多个属性和选项列表的XML

问题描述 投票:1回答:2

我有一个看起来与此类似的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; }
}

GeneralOptions

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
2个回答
2
投票
[XmlRoot("root")] public class Data { [XmlElement("data")] public OptionsData Options { get; set; } } public class OptionsData { [XmlAttribute("label")] public string Label { get; set; } [XmlAttribute("min")] public string Min { get; set; } [XmlAttribute("max")] public string Max { get; set; } [XmlElement("option")] public List<GeneralOptions> Items { get; } = new List<GeneralOptions>(); } public class GeneralOptions { [XmlElement("id")] public string Id { get; set; } [XmlElement("name")] public string Name { get; set; } }

0
投票
[XmlRoot(ElementName="option")] public class Option { [XmlElement(ElementName="id")] public string Id { get; set; } [XmlElement(ElementName="name")] public string Name { get; set; } } [XmlRoot(ElementName="data")] public class Data { [XmlElement(ElementName="option")] public List<Option> Option { get; set; } [XmlAttribute(AttributeName="label")] public string Label { get; set; } [XmlAttribute(AttributeName="min")] public string Min { get; set; } [XmlAttribute(AttributeName="max")] public string Max { get; set; } } [XmlRoot(ElementName="root")] public class Root { [XmlElement(ElementName="data")] public Data Data { get; set; } }
© www.soinside.com 2019 - 2024. All rights reserved.