2017-08-25 58 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']");