2016-12-01 115 views
0

我有一个看起来像这样的XML文件:如何获得XML的使用LINQ多个相同节点的子节点的值,以XML

<injuryRespData> 
    <lc01s> 
    <lc01> 
     <aac001>1</aac001> 
     <alca02>2</alca02> 
     <aab001>3</aab001> 
    </lc01> 
    <lc01> 
     <aac001>4</aac001> 
     <alca02>5</alca02> 
     <aab001>6</aab001> 
    </lc01> 
    <lc01> 
     <aac001>7</aac001> 
     <alca02>8</alca02> 
     <aab001>9</aab001> 
    </lc01> 
    </lc01s> 
</injuryRespData> 

我有一个类和列表实体:

public class lc01 
{ 
    public string aac001{set;get;} 
    public string alca02{set;get;} 
    public string aab001{set;get;} 
} 
List<lc01> list = new List<lc01>(); 

如何分别获取多个lc01节点下的子节点值并使用Linq to XML添加到List集合?

+2

使用'XmlSerializer'你已经有一类代表数据,需要。 – Fabio

回答

0

我解决了自己的问题:

var xml = @"<injuryRespData> 
    <lc01s> 
    <lc01> 
     <aac001>1</aac001> 
     <alca02>2</alca02> 
     <aab001>3</aab001> 
    </lc01> 
    <lc01> 
     <aac001>4</aac001> 
     <alca02>5</alca02> 
     <aab001>6</aab001> 
    </lc01> 
    <lc01> 
     <aac001>7</aac001> 
     <alca02>8</alca02> 
     <aab001>9</aab001> 
    </lc01> 
    </lc01s> 
</injuryRespData>"; 

XElement xmlDoc = XElement.Parse(xml); 
List<lc01> lc01List = new List<lc01>(); 
lc01List.clear(); 
foreach (XElement item in RespDoc.Descendants("lc01")) 
{ 
    lc01 temp = lc01() 
    { 
     aac001 = item.Element("aac001").Value, 
     alca02 = item.Element("alca02").Value, 
     aab001 = item.Element("aab001").Value 
    } 
    lc01List.Add(lc01); 
} 
0

你可以使用这个和Descendants方法Select做:

List<lc01> list=doc.Root.Descendants("lc01") 
        .Select(e=>new lc01{aac001=(string)e.Element("aac001"), 
             alca02=(string)e.Element("alca02"), 
             aab001=(string)e.Element("aab001") 
             }) 
        .ToList(); 
0
var xml = @"<injuryRespData> 
    <lc01s> 
    <lc01> 
     <aac001>1</aac001> 
     <alca02>2</alca02> 
     <aab001>3</aab001> 
    </lc01> 
    <lc01> 
     <aac001>4</aac001> 
     <alca02>5</alca02> 
     <aab001>6</aab001> 
    </lc01> 
    <lc01> 
     <aac001>7</aac001> 
     <alca02>8</alca02> 
     <aab001>9</aab001> 
    </lc01> 
    </lc01s> 
</injuryRespData>"; 

var result = (
    from x in XDocument.Parse(xml).Descendants("lc01").Cast<XElement>() 
    select new XmlSerializer(typeof(lc01)).Deserialize(new StringReader(x.ToString()))).ToList();