2017-08-25 55 views
0

我有一个看起来像这样的XML ...反序列化的XML对象使用类装饰([的XmlElement])

<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" 
} 

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

是否有某种能够像做功能...

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

回答

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']");