使用类装饰器将XML反序列化为对象([XmlElement])

时间:2017-08-25 18:07:59

标签: c# xml

我有一个看起来像这样的XML ......

<SET>
    <ENTITY>
        <HEADER>
            <ELEMENT TYPE = "a"></ELEMENT>
            <ELEMENT TYPE = "b"></ELEMENT>
            <ELEMENT TYPE = "c"></ELEMENT>
        </HEADER>

        <FOO>
            <BAR TYPE = "X">12345</BAR>
        </FOO>
    </ENTITY>

</SET>

我知道要获取我可以执行以下操作的元素或属性:

[Serializable()]
[XmlRoot("SET")]
public class Set
{

    [XmlElement("ENTITY")]
    public List<Entity> Entity { get; set; }

}

public class Entity
{
    [XmlElement("FOO")]
    public string Foo; //Returns "12345"

    [XmlAttribute("Type")]
    public string FooType; //returns "X"
}

我需要的是能够仅返回类型为“B”的ELEMENT值。我不想要“A”或“C”......

是否可以像......那样完成某种功能。

public class Header
{
    [XmlElement("ELEMENT",Type = "B")] 
    public string Element;
}

1 个答案:

答案 0 :(得分:1)

由于您只需要数据子集,因此使用Linq2Xml会更容易。

的LINQ:

XDocument doc = XDocument.Parse(xmlstring);

var xElem = doc.Descendants("ELEMENT")
               .Where(e => e.Attribute("TYPE")?.Value == "b")
               .FirstOrDefault();

Xpath的:

var xElem = doc.XPathSelectElement("//ELEMENT[@TYPE='b']");