【问题标题】:C#: How to get all descendant XElements including root element of an XElements elegantly?C#:如何优雅地获取所有后代 XElement,包括 XElement 的根元素?
【发布时间】:2020-12-07 10:48:17
【问题描述】:

我正在尝试根据特定属性的存在来获取所有后代 XElement,包括 XElement 的根元素。我不是很好的尝试:

var myXElements = form.FormData.Descendants().Where(e => e.Attributes().Where(a => a.Name == myProperty).Count() > 0).ToList();
// Extra for root element
if (form.FormData.Attribute(myProperty) != null)
{
    myXElements.Add(form.FormData);
}

其中 form.FormData 是 XElement 类型(我从 .dll 中接收),而 myProperty 是特定属性。

有没有更优雅的方法来实现这一点?

【问题讨论】:

  • 你不需要得到所有的后代。获取父节点自动获取整棵树。
  • @jdweng 请演示如何帮助将起始 XML <parent a="1"><child1><child2 a="2"/></child1></parent> 减少为两个 XElements { <parent a="1"/>, <child2 a="2" />} 的列表。
  • 需要的是下面的根元素:form.FormData.D.Descendants("Element Name")
  • @jdweng 这将为您提供标签名称为“元素名称”的所有元素的列表。 OP 想要一个后代元素的列表,无论它们的名称如何,它们都有特定的属性。
  • @GSerg : XElement 将包括后代。

标签: c# xml xelement


【解决方案1】:
var myXElements = form.FormData.DescendantsAndSelf().Where(e => e.Attribute(myProperty) != null).ToList()

【讨论】:

  • 虽然这段代码可能会解决问题,但一个好的答案应该解释代码的什么以及它如何提供帮助。
  • @BDL 这正是我想要的。另外,我不同意您的 -1 ,因为答案只是小周和简化了我的尝试。谢谢m8!
  • @OndřejKašpar:我没有对答案投票。该评论是从低质量审核队列中发布的。一般来说,除了提问者之外,没有解释的答案对于每个人来说都是次优的,因为您必须比较代码实际更改的内容。简短的一句话说明发生了什么变化以及为什么会大大改善答案。
  • @BDL 好吧,我不知道。谢谢你的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多