如何使用Linq to XML获取XML的多个相同节点的子节点的值

时间:2016-12-01 15:25:36

标签: c# 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>

我有一个Class和List实体:

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集合?

3 个答案:

答案 0 :(得分:0)

您可以使用DescendantsSelect方法执行此操作:

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();

答案 1 :(得分: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();

答案 2 :(得分: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);
}