xElement Linq 创建列表

Posted

技术标签:

【中文标题】xElement Linq 创建列表【英文标题】:xElement Linq Creating List 【发布时间】:2012-01-30 10:13:18 【问题描述】:

我创建了一个新类来从 xml 文件中读取数据,如下所示:

public class Validations

  public string id  get; set; 
  public List<string> lhsList  get; set; 
  public List<string> rhsList  get; set; 

XML我想读的是:

<root>
<Validation id="val3">
    <lhs id='Estimated' />
    <lhs id='Newqurter' />
    <rhs id='Current' />
    <rhs id='FirstQuarter' />
</Validation>
.
.
.

</root>

我为读取 xml 而编写的代码是:

List<Validations> vList = new List<Validations>();
vList = (from XElement xele in xdoc.Root.Elements()
  select new Validations
   
    id = xele.Attribute("id").Value.ToString(),
    // lhsList = ((xele.Elements().FirstOrDefault(p => p.Name == "lhs").FirstAttribute.Value
    // rhsList = ((xele.Elements().FirstOrDefault(p => p.Name == "rhs").FirstAttribute.Value
  
).ToList<Validations>();

如何阅读List&lt;lhsList&gt; ? 我试过了

lhsList = ((xele.Elements().FirstOrDefault(p => p.Name == "lhs").FirstAttribute.Value).ToList(), 

但它没有按预期工作。还有什么其他方法可以做到这一点?

【问题讨论】:

“不工作”是一个很差的问题描述。 不应该这行 ).ToList();像这样 ).ToList(); 错误 1 ​​无法将类型 'string' 隐式转换为 'System.Collections.Generic.List' 否则你将不得不去 ToString().ToList() 但不能真正通过描述来判断 @DJ Kraze:ToString() 之后我没有得到那个选项 【参考方案1】:

您可以按如下方式创建lhs 元素列表:

List<string> lhsElements = xele.Elements("lhs")
                               .Select(el => el.Attribute("id").Value)
                               .ToList();

这会选择所有lhs 元素,它们是xele 的子元素,然后选择它们的“id”属性的值。我将留给您解决如何将其与您的代码合并。

【讨论】:

成功了。谢谢。我会永远记住这个方法。关于 xml 有很多东西要学。哇。 :-) 当然……只需将此代码放在验证初始化块中。

以上是关于xElement Linq 创建列表的主要内容,如果未能解决你的问题,请参考以下文章

linq to xml

Linq-to-XML XElement.Remove() 留下不需要的空白

C# linq 从 XElement 树中选择重复项

如何在 XxmlElement 而不是 C# 中的 XElement 上运行 linq

使用 LINQ 和 XElement 查询 SQL 表

XElement 使用介绍