【问题标题】:Check if XML element exist using LINQ [duplicate]使用 LINQ 检查 XML 元素是否存在 [重复]
【发布时间】:2013-09-25 14:36:52
【问题描述】:

我正在将 XML 文档解析为 c# 项目,以检查是否存在名为“Feature”的元素。 在 c# 中,我使用 Feature Element 中存在的内容来确定是否应该运行 if 语句。

XML

<Projects>
 <Project>
   <Name>Test</Name>
    <Feature>AutoDev;AutoRev</Feature>
 </Project>
</Projects>

C#

var feature = (from project in XDocument.Load(xmlPath).Descendants("Project")                                     
where project.Element("Name").Equals(Project)                                     
select project.Element("Feature").Value).Single().Split(';');

if (names.Contains("Test"))
      //then load ticket variables....
   if (feature.Contains("AutoDev"))
      //then do this....

现在我收到一个错误: 序列不包含任何元素

在加载 Feature 时建议使用 any 方法来检查元素是否存在于数组中。不知道如何实现。

【问题讨论】:

  • 什么是ev.PortfolioProject..
  • 使用SingleOrDefault() 而不是Single() 这样如果没有找到,您将得到一个空值,而不是异常。
  • 感谢 JNYRanger,我会添加并测试。 Anirudh - ev.PortfolioProject 从应用层获取项目名称。

标签: c# xml linq


【解决方案1】:
project.Element("Name").Equals(ev.PortfolioProject)

应该是

project.Element("Name").Value.Equals(ev.PortfolioProject)
                        ^

【讨论】:

  • 一旦添加,我得到一个不同的例外,“重复的工作项目”但这会让我在完成的道路上走得更远。谢谢!
  • @blkhdy 使用 First 而不是 Single 方法
【解决方案2】:

我认为您在project.Element("Name") 中缺少.Value

试试这个:

var feature = (from project in XDocument.Load(xmlPath).Descendants("Project")                                     
where project.Element("Name").Value.Equals(ev.PortfolioProject)                                     
select project.Element("Feature").Value).Single().Split(';');

【讨论】:

  • 当然,随时,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2010-09-11
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
相关资源
最近更新 更多